게시일: Nov 14, 2011 12:50:17 AM
- PL/SQL의 기본 구조
① 선언부 (declarative part)
② 실행부 (executable part)
③ 예외처리부 (exception-building part)
[예외처리 구분 형식]
EXCEPTION WHEN 예외1 THEN 예외처리1
WHEN 예외2 THEN 예외처리2
...
WHEN OTHERS THEN 예외처리
declare --> ① 선언부
counter integer;
begin --> ② 실행부
counter := 10;
counter := counter / 0;
dbms_output.put_line(counter);
exception --> ③ 예외처리부
dbms_output.put_line('--- Error ---');
end;
[표] PL/SQL 미리 정의된 예외 (Predefined Exception)
------------------------------------------------------------------------------------------------------------------------
예외 내용 예외 번호 SQLCODE 발생시점
------------------------------------------------------------------------------------------------------------------------
ACCESS_INTO_NULL ORA-06530 -6530 초기화 되지 않은 오브젝트에 값을 할당하려고 할 경우
------------------------------------------------------------------------------------------------------------------------
CASE_NOT_FOUND ORA-06592 -6592 CASE 문장에서 ELSE 구문도 없고 WHEN 절에 명시된 조건을
만족하는 것이 하나도 없을 경우
------------------------------------------------------------------------------------------------------------------------
COLLECTION_IS_NULL ORA-06531 -6531 초기화되지 않은 중첩 테이블이나 VARRAY같은 콜렉션을
EXISTS 외의 다른 메소드로 접근을 시도할 경우 발생
------------------------------------------------------------------------------------------------------------------------
CURSOR_ALREADY_OPEN ORA-06511 -6511 이미 오픈된 커서를 다시 오픈하려고 시도하는 경우
------------------------------------------------------------------------------------------------------------------------
DUP_VAL_ON_INDEX ORA-00001 -1 유일 인덱스가 걸린 컬럼에 중복 데이터를 입력할 경우
------------------------------------------------------------------------------------------------------------------------
INVALID_CURSOR ORA-01001 -1001 허용되지 않은 커서에 접근할 경우
(오픈되지 않은 커서를 닫으려고 시도하는 경우)
------------------------------------------------------------------------------------------------------------------------
INVALID_NUMBER ORA-01722 -1722 SQL 문장에서 문자형 데이터를 숫자형으로 변환할 때 제대로 된
숫자고 변환이 되지 않을 경우
------------------------------------------------------------------------------------------------------------------------
LOGIN_DENIED ORA-01017 -1017 잘못된 사용자나 비밀번호로 로그인을 시도할 경우
------------------------------------------------------------------------------------------------------------------------
NO_DATA_FOUND ORA-01403 +100 SELECT INTO 문장의 결과로 선택된 로우가 하나도 없을 경우
------------------------------------------------------------------------------------------------------------------------
NOT_LOGGED_ON ORA-01012 -1012 오라클에 연결되지 않았을 경우
------------------------------------------------------------------------------------------------------------------------
PROGRAM_ERROR ORA-06501 -6501 PL/SQL 내부에 문제가 발생했을 경우
------------------------------------------------------------------------------------------------------------------------
SELF_IS_NULL ORA-30625 -30625 OBJECT 타입이 초기화되지 않은 상태에서 MEMBER 메소드를 사용할
경우
------------------------------------------------------------------------------------------------------------------------
STORAGE_ERROR ORA-06500 -6500 메모리가 부족한 경우
------------------------------------------------------------------------------------------------------------------------
SUBSCRIPT_BEYOND_COUNT ORA-06533 -6533 중첩 테이블이나 VARRAY의 요소값에 접근할 때, 명시한 인덱스
번호가 콜렉션 전체 크기를 넘어설 경우
------------------------------------------------------------------------------------------------------------------------
SUBSCRIPT_OUTSIDE_LIMIT ORA-06532 -6532 중첩 테이블이나 BARRAY의 요소값에 접근할 때, 잘못된 인덱스
번호를 사용할 경우 (예. 인덱스 번호로 -1 사용시)
------------------------------------------------------------------------------------------------------------------------
SYS_INVALID_ROWID ORA-01410 -1410 문자열을 ROWID로 변환할 때 변환값에 해당하는 ROWID가
없을 경우
------------------------------------------------------------------------------------------------------------------------
TIMEOUT_ON_RESOURCE ORA-00051 -51 오라클이 리소스를 기다리는 동안 타임아웃이 발생했을 경우
------------------------------------------------------------------------------------------------------------------------
TOO_MANY_ROWS ORA-01422 -1422 SELECT INTO 문장에서 하나 이상의 로우가 반환될 경우
------------------------------------------------------------------------------------------------------------------------
VALUE_ERROR ORA-06502 -6502 문자형 데이터를 숫자형으로 변환하는데 타당한 숫자가 아니거나
값을 할당시 값의 크기가 선언된 변수의 크기를 넘어서는 경우와
같이 값을 변환하거나 할당할 때 오류가 발생할 경우
------------------------------------------------------------------------------------------------------------------------
ZERO_DIVIDE ORA-01476 -1476 제수가 0일때 발생
------------------------------------------------------------------------------------------------------------------------
참고) PL/SQL은 Pascal을 참조하였다. '='를 ':='와 같이 표기한 것도 같은 맥락이다. (Delphi도 Pascal 기반으로 만들어진 언어)
참고) DBMS_OUTPUT 패키지를 사용하기 위한 명령
SQL> set serveroutput on;