2017-05-11 21 views
-3

我在寫一個簡單的PL SQL過程。但是它會拋出聲明忽略錯誤。我是否需要將它們稱爲單個變量,然後插入到最終表中?請檢查下面的代碼。條件PL SQL過程不起作用

PROCEDURE EMP_MAIN IS BEGIN 

FOR CUR1 IN 
     (SELECT STG.INT1 INT1 
    , STG.OPT1 OPT1 
    , STG.FDT1 DT1 
     , STG.HDR_SRC_LEAD_ID HDR_LEAD_ID 
    , STG.HDR_SRC_NAME HDR_SRC_NAME 
    FROM MAIN_EMP STG) 

    BEGIN IF (INT1 IS NOT NULL) 
    THEN 
    INSERT INTO EMP_FIN(
              ROW_ID 
             , INT 
             , OPTION 
             , DATE 
             , TYPE          
             , RATING 
            ) 
       VALUES 
            (
             ROWNUM 
            , CUR1.INT1 
            , CUR1.OPT1 
            , CUR1.DT1 
            , 'Prospect' 
            , '1' 
       ); 
      COMMIT; 
      END IF; END EMP_MAIN; 

請讓我知道如果我失去了一些東西。

+1

一個提示:通過創建一個簡單的程序,檢查如何'CREATE PROCEDURE'工程啓動,然後,當你將能夠創建一個過程,只有做'空;',嘗試添加一些代碼。 – Aleksej

+0

你缺少'LOOP ... END LOOP'。 '對於CUR1 IN(...)LOOP END LOOP;' – GriffeyDog

回答

0

此代碼解決了這個問題,並且使用Oracle [基於集合的處理引擎]來實現一次一行/一次一個進程。 我建議,而不是,簡單地說:

INSERT INTO EMP_FIN (ROW_ID, INT, OPTION 
             , DATE 
             , TYPE 
             , RATING 
            ) 
SELECT rownum, STG.INT1 INT1 
    , STG.OPT1 OPT1 
    , STG.FDT1 DT1 
    , STG.HDR_SRC_LEAD_ID HDR_LEAD_ID 
    , STG.HDR_SRC_NAME HDR_SRC_NAME 
    FROM MAIN_EMP STG 
    WHERE INT1 IS NOT NULL;