2017-05-11 24 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

ヒント:あなたが唯一の 'ヌルを行うプロシージャを作成できるようになりますと、その後、' PROCEDURE'が働くCREATEどのようにチェックするために、より簡単な手順を作成することによって開始し、 ; '、いくつかのコードを追加しようとします。 – Aleksej

+0

'LOOP ... END LOOP'がありません。 'FOR CUR1 IN(...)LOOP END LOOP;' – GriffeyDog

答えて

0

このコードは、この問題にすべての問題を近づけ、Oracle [セットベースの処理エンジン]を使用して、1度に1行ずつの処理を実行します。 私は単純に、代わりにお勧めします:

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; 
関連する問題