CREATE OR REPLACE PROCEDURE EXAMPLE.ADDPLEMP(
P_ENAME IN EMP.ENAME%TYPE,
P_JOB IN EMP.JOB%TYPE
)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
-- 예외 처리 시작
BEGIN
INSERT INTO EMP(EMPNO, ENAME, JOB)
VALUES((SELECT NVL(MAX(EMPNO), 0) + 1 FROM EMP), P_ENAME, P_JOB);
-- 예외가 발생하지 않았을 때 실행될 코드
DBMS_OUTPUT.PUT_LINE('HELLO');
COMMIT; -- AUTONOMOUS_TRANSACTION 프로시저는 명시적으로 커밋해야 합니다.
EXCEPTION
WHEN OTHERS THEN
-- 예외 처리를 위한 코드
-- 예외 처리 작업을 수행하거나 예외를 다시 발생시킬 수 있습니다.
-- 예를 들어, 오류 메시지를 출력하거나 로그를 기록할 수 있습니다.
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLCODE || ' - ' || SQLERRM);
ROLLBACK; -- 예외 발생 시 롤백하여 변경 사항을 취소합니다.
END;
-- 예외 처리 종료
END ADDPLEMP;
디비버로 실행하면
update rows가 -1로 뜹니다..
어떻게 해야 하나요?
혹시 CALL 하신 건가요? CALL 이 아닌 듯 합니다.
Oracle 공식 툴인 sqlplus 나 sqldeveloper 에서는 EXEC 사용 가능합니다.
DBeaver 에서 EXEC 사용이 가능할지는 사용 안해봐서 모르겠네요.
EXEC 가 안된다면 다음과 같이 Begin ~ end 로 실행해 보세요.
BEGIN
프로시저명(인수1, 인수2);
END;
/