2011-05-02 5 views
0

나는이수없는 사용자의 경우 삽입 문

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가 CASE에게 DECLARE을 BEGIN을 최종 식별자 인 경우

답변

0

참조 -

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

이 – Bangaram

3

처럼 경우에 따라서

http://www.techonthenet.com/oracle/loops/if_then.php, 뭔가 당신은 당신의 절차에서 몇 가지 구문 오류를 가지고 :

  • 는 IF 후, 당신은 그때 필요 (하지 BEGIN)
  • IF-Block은 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 
+0

매우 – Bangaram

+0

한 모든 구문 오류를 설명하기위한 U 감사합니다 아주 많이 U 감사는 – Phil

+0

u는 내가 그것을 달성하기 위해 하나의 INSERT를 사용하는 방법을 설명해 plzzz 수 있습니까? – Bangaram