Oracle/PL/SQL2018. 12. 24. 11:55

오라클 에러 메시지를 조회할 수 있는 함수를 생성해보자.


아래와 같이 패키지를 생성하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- 1
CREATE OR REPLACE PACKAGE pkg_errm
IS
    TYPE trc_errm IS RECORD (code NUMBER, errm VARCHAR2(4000));
    TYPE tnt_errm IS TABLE OF trc_errm;
    FUNCTION fnc_errm RETURN tnt_errm PIPELINED;
END pkg_errm;
/
 
CREATE OR REPLACE PACKAGE BODY pkg_errm
IS
    FUNCTION fnc_errm RETURN tnt_errm PIPELINED
    IS
        l_errm trc_errm;
    BEGIN
        FOR i IN 1 .. 19999
        LOOP
            l_errm.code := i;
            l_errm.errm := SQLERRM (-i);
            IF (l_errm.errm NOT LIKE '%Message%not%found%') THEN PIPE ROW (l_errm); END IF;
        END LOOP;
    END fnc_errm;
END pkg_errm;
/

아래는 함수를 조회한 결과다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 2
SELECT * FROM TABLE (pkg_errm.fnc_errm) WHERE ROWNUM <= 10;
 
CODE ERRM
---- -------------------------------------------------------------------------------
   1 ORA-00001: 무결성 제약 조건(.)에 위배됩니다
  17 ORA-00017: 트레이스 이벤트 설정이 세션에 요구되었습니다
  18 ORA-00018: 최대 세션 수를 초과했습니다
  19 ORA-00019: 최대 세션 라이선스 수를 초과했습니다
  20 ORA-00020: 최대 프로세스 () 수를 초과했습니다
  21 ORA-00021: 세션이 다른 프로세스에 첨부되어 있음; 세션을 변경할 수 없습니다
  22 ORA-00022: 부적절한 세션ID이므로 액세스가 거절되었습니다
  23 ORA-00023: 세션이 프로세스 고유의 메모리를 참조함; 세션을 분리할 수 없습니다
  24 ORA-00024: 단일 프로세스 모드에서는 하나 이상의 프로세스가 로그인할 수 없습니다
  25 ORA-00025: (를)을 할당하는데 실패했습니다
 
10 행이 선택되었습니다.

NLS_LANGUAGE 파라미터를 변경하면 영문 에러 메시지를 조회할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- 3
ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
 
Session altered.
 
SELECT * FROM TABLE (pkg_errm.fnc_errm) WHERE ROWNUM <= 10;
 
CODE ERRM
---- -------------------------------------------------------------------------------
   1 ORA-00001: unique constraint (.) violated
  17 ORA-00017: session requested to set trace event
  18 ORA-00018: maximum number of sessions exceeded
  19 ORA-00019: maximum number of session licenses exceeded
  20 ORA-00020: maximum number of processes () exceeded
  21 ORA-00021: session attached to some other process; cannot switch session
  22 ORA-00022: invalid session ID; access denied
  23 ORA-00023: session references process private memory; cannot detach session
  24 ORA-00024: logins from more than one process not allowed in single-process mode
  25 ORA-00025: failed to ALLOCATE
 
10 rows selected.


'Oracle > PL/SQL' 카테고리의 다른 글

다형성 테이블 함수  (0) 2019.01.04
단위 변환 함수  (0) 2018.12.31
런타임 실행 계획 조회 함수  (0) 2018.12.12
RAW 변환 함수  (0) 2018.11.13
데이터 타입 코드 변환 함수  (0) 2018.11.12
Posted by 정희락_