PL / SQL过程修订

时间:2019-07-10 13:14:43

标签: sql oracle plsql procedure

当前,我们在程序方面存在问题。修正了区分返回值的程序,该返回值取决于机器类型是“道路拖车”还是“道路货车”。

具有这些值的视图,并且知道我们可以使用“ 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'),则返回14

ELSEIF MCH_TYPE不是'ROAD_WAGON'或'ROAD_TRAILER'且TEMP_ in('720'),然后返回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;

2 个答案:

答案 0 :(得分:0)

paperclipsandpaper,像Tad一样,我不确定您的问题是什么,但是如果您试图在temp_为720时添加另一个条件,那么以下内容可能会帮助您解决问题。

handleConfirm()

答案 1 :(得分:0)

通过将以下内容简单地包含到存储过程中解决了该问题:

UTF-8