开发者

Not able to user if condition for insert statement

I am creating a procedure like this

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;

But i am getting this error

(S224) Expecting:

statement_terminator BEGIN CASE DECLARE END IDENTIFIER IF LOOP


You've got several syntax errors in your procedure:

  • after IF, you need THEN (not BEGIN)
  • an IF-Block is closed with END IF;
  • your VALUES contain a superfluous comma at the end

Here's a fixed version:

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;

although I'd recommend to get rid of the loop altogether and use a single INSERT statement instead.

EDIT: Single INSERT solution:

 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


IF condition THEN
         {...statements...}
END IF;

Reference - http://www.techonthenet.com/oracle/loops/if_then.php

So in your case, something like

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜