<샘플코드에서 사용한 데이터는 HR 스키마이고, 오라클 설치시 생성할 수 있는 기본 스키마 입니다>
# 아래와 같은 경우, 입력창에서 '1'을 입력하면 데이터가 없지만 오류가 발생하지는 않는다.
# 그래서 원하는 결과가 안 나올수도 있다.
Declare
v_sum_sal number;
begin
select sum(salary) into v_sum_sal
from employees
where DEPARTMENT_ID=&dno;
DBMS_OUTPUT.PUT_LINE('the sum is: ['||v_sum_sal||']');
DBMS_OUTPUT.PUT_LINE(sql%rowcount);
EXCEPTION
when no_data_found then
DBMS_OUTPUT.PUT_LINE('no data found');
end;
# 아래와 같은 경우, 입력창에서 '1'을 입력하면 조건문에서 결과를 확인해서 데이터가 없으면 예외처리를 발생시킨다
Declare
v_sum_sal number;
v_er exception;
begin
select sum(salary) into v_sum_sal
from employees
where DEPARTMENT_ID=&dno;
if v_sum_sal is not null then
DBMS_OUTPUT.PUT_LINE('the sum is: ['||v_sum_sal||']');
DBMS_OUTPUT.PUT_LINE(sql%rowcount);
else
raise v_er;
end if;
EXCEPTION
when v_er then
DBMS_OUTPUT.PUT_LINE('no data found');
end;
예외처리가 발생할때 해당 block 에서 처리할수 없다면 상위 block의 예외처리에서 처리가능하다.
# 변수 사이즈를 2자리로 제한하여 예외사항이 발생하게 설정하였다.
# 내부 block에서 발생한 오류를 외부 block에서 처리한다.
Declare
v_sum_sal number(2); --number is smaller
v_er exception;
begin
--오류는 아래 블록에서 발생하지만 예외처리를 못해서 외부 블록에서 예외처리함.
begin
select sum(salary) into v_sum_sal
from employees
where DEPARTMENT_ID=&dno;
if v_sum_sal is not null then
DBMS_OUTPUT.PUT_LINE('the sum is '||v_sum_sal);
DBMS_OUTPUT.PUT_LINE(sql%rowcount);
else
raise v_er;
end if;
EXCEPTION
when v_er then
DBMS_OUTPUT.PUT_LINE('no data found');
-- when others then
-- DBMS_OUTPUT.PUT_LINE('others.....');
-- dbms_output.put_line(sqlcode);
-- dbms_output.put_line(sqlerrm);
end;
EXCEPTION
when others then
dbms_output.put_line(sqlcode);
dbms_output.put_line(sqlerrm);
end;
# '1'을 입력한 출력 결과
no data found
# '10'을 입력한 출력 결과
-6502
ORA-06502: PL/SQL: numeric or value error: number precision too large
'Database > PLSQL' 카테고리의 다른 글
032 - [Oracle PL/SQL] Procedure - (IN parameter)/ Error 처리 (0) | 2024.02.23 |
---|---|
031 - [Oracle PL/SQL] Procedure (0) | 2024.02.22 |
029 - [Oracle PL/SQL] Exceptions - User defined Error (0) | 2024.02.21 |
028 - [Oracle PL/SQL] Exceptions - Non predefined error (0) | 2024.02.21 |
027 - [Oracle PL/SQL] Exceptions - common mistakes (0) | 2024.02.21 |