PLSQL예외처리, Non-Predefined,사용자 정의 오류, RAISE, RAISE_APPLICATION_ERROR, SQL학원,SQL교육,자바학원,자바교육, 오라클교육,오라클학원,ORACLE동영상
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=714
ojc.asia
https://www.youtube.com/watch?v=MBIL_eeK8pQ&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=21

https://www.youtube.com/watch?v=Cmx2id1YGvA&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=20

https://www.youtube.com/watch?v=rIf50lhW1IY&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=19

https://www.youtube.com/watch?v=8hc030THr8w&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=16

https://www.youtube.com/watch?v=-2CzUYAmRvk&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=5

오라클 PL/SQL
Non-Predefined Exception
사용자 정의 오류
(RAISE, RAISE_APPLICATION_ERROR)
Non-Predefined Exception
- 오라클 서버 오류중 서버에 미리 정의되지 않은 예외
- Declare절에서 예외명을 정의하고 EXCEPTION_INIT 함수를 이용하여 예외와 오라클 서버 오류코드를 매핑하면 된다.
SET SERVEROUTPUT ON
create or replace procedure deldept
(p_deptno in dept.deptno%type)
as
child_error exception;
pragma exception_init(child_error, -2292);
begin
delete from dept
where deptno=p_deptno;
commit;
exception
when child_error then
dbms_output.put_line('자식 레코드가 있으므로 삭제할 수 없습니다.');
end;
/
프로시저가 생성되었습니다.
exec deldept(10)
자식 레코드가 있으므로 삭제할 수 없습니다.
사용자 정의 오류(User Defined Exception)
RAISE 구문을 이용하는 방법
- 오라클 서버 오류가 아니라 사용자가 정의한 논리적인 오류.
- Declare절에서 예외명을 정의하고 예외를 발생시키고 싶은 곳에서 RAISE 구문을 이용하면 된다. 그리고 EXCEPTION절에서는 해당 예외명으로 받아서 처리하면 된다.
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE insertemp2(v_empno IN emp.empno%TYPE ,
v_ename IN emp.ename%TYPE,
v_sal IN emp.sal%TYPE)
IS
highsal_err EXCEPTION ;
BEGIN
IF v_sal < 5000 THEN
INSERT INTO emp (empno, ename, sal)
VALUES(v_empno, v_ename, v_sal) ;
DBMS_OUTPUT.PUT_LINE ('정상입력 OK...') ;
ELSE
RAISE highsal_err ;
END IF ;
EXCEPTION
WHEN highsal_err THEN
DBMS_OUTPUT.PUT_LINE ('급여를 5000 미만으로 입력하세요!') ;
END;
/
프로시저가 생성되었습니다.
exec insertemp2(2222,'오자커',2222)
정상입력 OK...
exec insertemp2(5555,'오자커',5555)
급여를 5000 미만으로 입력하세요!
RAISE_APPLICATION_ERROR 구문을 이용하는 방법
- 사용자가 임의의 조건으로 SQLCODE와 SQLERRM을 정의할 수 있다.
- SQLCODE는 -20999번에서 -20000번 사이 정수로 정의하며 EXCEPTION절을 사용하지 않아도 된다.
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE insertemp3(v_empno IN emp.empno%TYPE ,
v_ename IN emp.ename%TYPE,
v_sal IN emp.sal%TYPE)
IS
BEGIN
IF v_sal < 5000 THEN
INSERT INTO emp (empno, ename, sal)
VALUES(v_empno, v_ename, v_sal) ;
DBMS_OUTPUT.PUT_LINE ('정상입력OK...') ;
ELSE
RAISE_APPLICATION_ERROR(-20000,'급여를 5000 미만으로 입력하세요!');
END IF ;
END;
/
프로시저가 생성되었습니다.
exec insertemp3(5555,'오자커',5555)
BEGIN insertemp3(5555,'오자커',5555); END;
*
1행에 오류:
ORA-20000: 급여를 5000 미만으로 입력하세요!
ORA-06512: "SCOTT.INSERTEMP3", 11행
ORA-06512: 1행
#PLSQL예외처리, #NonPredefined, #사용자정의오류, #RAISE, #RAISE_APPLICATION_ERROR, #SQL학원,#SQL교육,#자바학원,#자바교육, #오라클교육,#오라클학원, PLSQL예외처리, NonPredefined, 사용자정의오류, RAISE, RAISE_APPLICATION_ERROR, SQL학원,SQL교육,자바학원,자바교육, 오라클교육,오라클학원