Невозможно использовать условие if для оператора вставки

Я создаю такую ​​​​процедуру

CREATE OR REPLACE PROCEDURE MY_PROC AS

CURSOR DLR_UPDT IS

SELECT B.MDN,A.AMNT
FROM 
E_D A,E_D_A_D B
WHERE 
A.U_ID=B.U_ID AND
A.P_F<>'Y';

BEGIN

FOR Y IN DLR_UPDT

LOOP

IF (Y.AMNT>0)
   BEGIN
    INSERT INTO S_T_D_O
               (ID, MDN
               )
        VALUES (SEQ.NEXTVAL, Y.MDN,
               );
   END

END LOOP;

END;

Но я получаю эту ошибку

(S224) Ожидание:
statement_terminator BEGIN CASE DECLARE END IDENTIFIER IF LOOP


person Bangaram    schedule 02.05.2011    source источник


Ответы (2)


У вас есть несколько синтаксических ошибок в вашей процедуре:

  • после IF вам нужно THEN (не BEGIN)
  • IF-блок закрывается с помощью END IF;
  • ваши ЦЕННОСТИ содержат лишнюю запятую в конце

Вот исправленная версия:

CREATE OR REPLACE PROCEDURE MY_PROC AS
  CURSOR DLR_UPDT IS
    SELECT B.MDN,
           A.AMNT
      FROM E_D     A,
           E_D_A_D B

     WHERE A.U_ID = B.U_ID
       AND A.P_F <> 'Y';
BEGIN
  FOR Y IN DLR_UPDT
  LOOP
    IF (Y.AMNT > 0) then
      INSERT INTO S_T_D_O
        (ID,
         MDN)
      VALUES
        (SEQ.NEXTVAL,
         Y.MDN);
    END if;
  END LOOP;
END;

хотя я бы рекомендовал вообще избавиться от цикла и вместо этого использовать один оператор INSERT.

РЕДАКТИРОВАТЬ: единственное решение INSERT:

 INSERT INTO S_T_D_O
    (ID, MDN)          
 (SELECT SEQ.NEXTVAL,
         B.MDN
  FROM E_D     A,
       E_D_A_D B    
  WHERE A.U_ID = B.U_ID
    AND A.P_F <> 'Y'
    AND A.AMNT > 0); -- only insert rows with positive amount
person Frank Schmitt    schedule 02.05.2011