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;
精彩评论