1. 기본문. 예외처리가 없음(20)
declare
v_department_id em.department_id%type := &deptno;
dummy number;
begin
select 1
into dummy
from em
where department_id = v_department_id;
dbms_output.put_line('ok');
end;
/
2. 사전정의된 예외처리방법(20)
declare
v_department_id em.department_id%type := &deptno;
dummy number;
begin
select 1
into dummy
from em
where department_id = v_department_id;
dbms_output.put_line('ok');
exception
when too_many_rows then
dbms_output.put_line('too many rows return');
when others then
dbms_output.put_line(sqlerrm);
end;
/
3. 사전정의안된 오류 예외처리 방법(20). too_many_rows 가 없다고 가정
declare
v_department_id em.department_id%type := &deptno; --deptno를 받음
dummy number; --의미없지만 select가 돌아가게 하기 위해
toomany exception; --1. exception 명 선언
pragma exception_init(toomany, -1422); --2.
begin
select 1
into dummy --의미없지만 select가 돌아가게 하기 위해
from em
where department_id = v_department_id;
dbms_output.put_line('ok');
exception
when toomany then
dbms_output.put_line('too many rows return');
when others then
dbms_output.put_line(sqlerrm);
end;
/
4. 유저 정의 예외처리(300) 에러메시지 발생, 중지
declare
v_department_id em.department_id%type := &deptno;
dummy number;
begin
if v_department_id >= 300 then
raise_application_error(-20000, '300이상의 값을 입력하지 마시옵소서');
else
select 1
into dummy
from em
where department_id = v_department_id;
dbms_output.put_line('ok');
end if;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
/
5. 유저 정의 예외처리(300) 실행 후 에러 메시지 정상 핸들링
declare
v_department_id em.department_id%type := &deptno;
dummy number;
over_dept_err exception;
pragma exception_init(over_dept_err, -20000);
begin
if v_department_id >= 300 then
raise_application_error(-20000, '300이상의 값을 입력하지 마시옵소서');
else
select 1
into dummy
from em
where department_id = v_department_id;
dbms_output.put_line('ok');
end if;
exception
when over_dept_err then
dbms_output.put_line(sqlerrm);
when others then
dbms_output.put_line(sqlerrm);
end;
/
이거 말고 더 예제는 있습니다.
'Knowledge > PLSQL' 카테고리의 다른 글
After each row Trigger sample (0) | 2015.10.20 |
---|