[英]PL/SQL Procedure Amendment
Currently we have an issue with a procedure. 目前,我们的程序存在问题。 An amendment to the procedure to differentiate the returned value determined on if the Machine Type is 'ROAD TRAILER' or 'ROAD WAGON'.
修正了对区分返回值的程序的确定,该返回值取决于“机器类型”是“道路拖车”还是“道路货车”。
The view which has these values and know that we can use ' MCH_CODE ' to create a relationship between ACTIVE_WORK_ORDER_TAB and EQUIPMENT_FUNCTIONAL_UIV. 具有这些值的视图并且知道我们可以使用“ MCH_CODE ”在ACTIVE_WORK_ORDER_TAB和EQUIPMENT_FUNCTIONAL_UIV之间创建关系。
Tables I think are required (some currently in use) 我认为是必需的表(某些正在使用中)
Basically, this is how it should read however, I'm finding it difficult to update the procedure every time I've amended the statement it has broken. 基本上,这就是它应该阅读的方式,但是,我发现每次修改已损坏的语句时,都很难更新该过程。
If the MCH_TYPE is ROAD_WAGON or ROAD_TRAILER and TEMP_ in ('682','720','770','775','784') then return 14 如果MCH_TYPE是ROAD_WAGON或ROAD_TRAILER和TEMP_ in('682','720','770','775','784'),则返回14
ELSEIF the MCH_TYPE is NOT 'ROAD_WAGON' or 'ROAD_TRAILER' and TEMP_ in ('720') then return 14 ELSEIF MCH_TYPE不是'ROAD_WAGON'或'ROAD_TRAILER'和TEMP_ in('720'),然后返回14
Example of procedure below: 以下程序示例:
temp_ NUMBER;
serv_ VARCHAR2(100);
attr_ VARCHAR2(2000);
info_ VARCHAR2(2000);
WO_STATUS_ID_ VARCHAR2(200);
Record_Found_ BOOLEAN;
contract_ VARCHAR2(200);
Pre_Accounting_id_ NUMBER;
LoopCount_ NUMBER;
CURSOR get_preacc IS
SELECT *
FROM PRE_ACCOUNTING
WHERE pre_accounting_id = Pre_Accounting_id_ ;
CURSOR get_rec IS
SELECT WO_STATUS_ID,contract
FROM ACTIVE_WORK_ORDER_TAB
WHERE PRE_ACCOUNTING_ID = Pre_Accounting_id_;
BEGIN
Pre_Accounting_Id_ := Client_sys.Get_Item_Value('PRE_ACCOUNTING_ID', Pre_Accounting_Attr_);
Record_Found_ := FALSE;
FOR c_get_rec IN get_rec LOOP
Record_Found_ := TRUE;
WO_STATUS_ID_ := c_get_rec.wo_status_id;
contract_ := c_get_rec.contract;
END LOOP;
IF NVL(WO_STATUS_ID_,'XXX1') NOT IN ('RELEASED','STARTED','FAULTREPORT', 'WORKREQUEST') THEN
RETURN;
END IF;
LoopCount_ := 0;
<<IF_ERROR_LOOP>>
BEGIN
FOR x_ IN get_preacc LOOP
BEGIN
temp_ := to_number(x_.codeno_b);
EXCEPTION
WHEN OTHERS then
temp_ := 0;
END;
IF temp_ >= 450 and temp_ <= 470 THEN
serv_ := '12';
ELSIF temp_ = 682 or temp_ = 720 or temp_ = 770 or temp_ = 775 or temp_ = 784 THEN
serv_ := '14';
ELSIF temp_ = 950 THEN
serv_ := '12';
ELSIF temp_ = 685 THEN
serv_ := '22';
ELSE
serv_ := '16';
END IF;
IF nvl(x_.CODENO_C,'X') = serv_ THEN
RETURN;
END IF;
Client_SYS.clear_Attr(attr_);
Client_SYS.Add_To_Attr('CODENO_C', serv_,attr_);
Client_SYS.Add_To_Attr('COMPANY', Site_API.Get_Company(contract_),attr_);
Client_SYS.Add_To_Attr('CONTRACT', contract_,attr_);
PRE_ACCOUNTING_API.Modify__(info_,x_.objid,x_.objversion,attr_,'DO');
END LOOP;
EXCEPTION
WHEN OTHERS THEN
LoopCount_ := LoopCount_ +1;
IF LoopCount_ < 20 THEN
DBMS_LOCK.SLEEP (20);
GOTO IF_ERROR_LOOP;
END IF;
END;
paperclipsandpaper, Like Tad I am not sure what your issue is but if you are trying to add another condition when the temp_ is 720 then maybe the following will help you figure out your problem. 纸夹和纸,像Tad一样,我不确定您的问题是什么,但是如果您尝试在temp_为720时添加另一个条件,那么以下内容可能会帮助您解决问题。
elsif temp_ in (682,770,775,784) then serv_ := 14;
elsif temp_ = 720 and mch_type not in ('ROAD_WAGON','ROAD_TRAILER') then serv_ := 14;
elsif temp- = 950 ...
Resolved the problem by simply including the following in to the stored procedure: 通过将以下内容简单地包含到存储过程中,解决了该问题:
BEGIN
FOR x_ IN get_preacc LOOP
BEGIN
temp_ := to_number(x_.codeno_b);
MCH_TYPE := MCH_TYPE;
EXCEPTION
WHEN OTHERS then
temp_ := 0;
END;
IF temp_ >= 450
and temp_ <= 470 THEN
serv_ := '12';
ELSIF (temp_ = 720 and (MCH_TYPE = 'ROAD WAGON' OR MCH_TYPE = 'ROAD TRAILER'))
then serv_ := '20';
ELSIF temp_ = 682
or (temp_ = 720 and (MCH_TYPE != 'ROAD WAGON' OR MCH_TYPE != 'ROAD TRAILER'))
or temp_ = 770
or temp_ = 775
or temp_ = 784
THEN
serv_ := '14';
ELSIF temp_ = 950 THEN
serv_ := '12';
ELSIF temp_ = 741
or temp_ = 773
or temp_ = 774
or temp_ = 775
or temp_ = 740 THEN
serv_ := '22';
ELSIF temp_ = 685 THEN
serv_ := '22';
ELSE
serv_ := '16';
END IF;
IF nvl(x_.CODENO_C,'X') = serv_ THEN
RETURN;
END IF;
Client_SYS.clear_Attr(attr_);
Client_SYS.Add_To_Attr('CODENO_C', serv_,attr_);
Client_SYS.Add_To_Attr('COMPANY', Site_API.Get_Company(contract_),attr_);
Client_SYS.Add_To_Attr('CONTRACT', contract_,attr_);
PRE_ACCOUNTING_API.Modify__(info_,x_.objid,x_.objversion,attr_,'DO');
END LOOP;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.