PL/SQL 程序修改
PL/SQL Procedure Amendment
目前我们的程序有问题。对区分 returned 值的程序进行了修正,如果机器类型是 'ROAD TRAILER' 或 'ROAD WAGON'。
具有这些值的视图知道我们可以使用“MCH_CODE”在 ACTIVE_WORK_ORDER_TAB 和 EQUIPMENT_FUNCTIONAL_UIV 之间创建关系.
我认为需要的表格(一些目前正在使用)
- EQUIPMENT_FUNCTIONAL_UIV(MCH_TYPE 需要并加入 VIA MCH_CODE 到 ACTIVE_WORK_ORDER_TAB
- ACTIVE_WORK_ORDER_TAB
基本上,它应该是这样读的,但是,我发现每次我修改它破坏的声明时都很难更新程序。
如果 MCH_TYPE 是 ROAD_WAGON 或 ROAD_TRAILER 并且 TEMP_ in ('682','720','770','775','784') 那么 return14
ELSEIF MCH_TYPE 不是 'ROAD_WAGON' 或 'ROAD_TRAILER' 和 TEMP_ in ('720') 然后 return 14
以下程序示例:
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,和 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 ...
通过简单地将以下内容包含到存储过程中解决了问题:
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;
目前我们的程序有问题。对区分 returned 值的程序进行了修正,如果机器类型是 'ROAD TRAILER' 或 'ROAD WAGON'。
具有这些值的视图知道我们可以使用“MCH_CODE”在 ACTIVE_WORK_ORDER_TAB 和 EQUIPMENT_FUNCTIONAL_UIV 之间创建关系.
我认为需要的表格(一些目前正在使用)
- EQUIPMENT_FUNCTIONAL_UIV(MCH_TYPE 需要并加入 VIA MCH_CODE 到 ACTIVE_WORK_ORDER_TAB
- ACTIVE_WORK_ORDER_TAB
基本上,它应该是这样读的,但是,我发现每次我修改它破坏的声明时都很难更新程序。
如果 MCH_TYPE 是 ROAD_WAGON 或 ROAD_TRAILER 并且 TEMP_ in ('682','720','770','775','784') 那么 return14
ELSEIF MCH_TYPE 不是 'ROAD_WAGON' 或 'ROAD_TRAILER' 和 TEMP_ in ('720') 然后 return 14
以下程序示例:
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,和 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 ...
通过简单地将以下内容包含到存储过程中解决了问题:
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;