프로시저에서 업데이트 실행시 질문입니다. 0 1 639

by SQL모험가 [2021.08.07 12:53:54]


CREATE OR REPLACE PROCEDURE update_test
IS
BEGIN
    DBMS_OUTPUT.ENABLE;

    UPDATE EMP01 A 
    SET(A.CUST_CODE, A.CUST_CARDNO, A.CUST_CODE_OLD)
    = (SELECT B.NEW_CODE, A.CUST_CODE, A.CUST_CODE FROM TEMP_EMP B WHERE A.CUST_CODE = B.CUST_CODE)
    WHERE EXISTS (
        SELECT 'x' FROM TEMP_EMP B WHERE A.CUST_CODE = B.CUST_CODE 
    );
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('데이터 수정 성공');
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('SQL ERROR MESSAGE: ' || SQLERRM);
END update_test;

DB는 오라클 11g이고 질문 드릴것이,

저렇게 만들고 컴파일 하면 PL/SQL프로시저가 생성되는것으로 알고 있습니다.

그 뒤에 EXEC update_test();

실행시키면 update가 되어야 하는데, update 되지 않습니다.

그런데 단순하게 update구문만 떼어내서 실행하면,

    UPDATE EMP01 A 
    SET(A.CUST_CODE, A.CUST_CARDNO, A.CUST_CODE_OLD)
    = (SELECT B.NEW_CODE, A.CUST_CODE, A.CUST_CODE FROM TEMP_EMP B WHERE A.CUST_CODE = B.CUST_CODE)
    WHERE EXISTS (
        SELECT 'x' FROM TEMP_EMP B WHERE A.CUST_CODE = B.CUST_CODE 
    );

 

update가 정상적으로 이루어집니다.

누락된 부분이 있어서 실행이 안되나요 ㅠ

혹시 프로시저에서 잘못된 부분이 있다면 가르쳐주시길 바랍니다.

by pajama [2021.08.08 23:29:22]

update 문장만 바꿔서 테스트 해보니 잘 됩니다.

구문엔 문제 없는듯 ...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입