Oracle/Administration2018. 3. 4. 10:50

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


아래와 같이 함수를 생성하자.

-- 1
CREATE OR REPLACE PACKAGE pg_errm
IS
    TYPE t_errm_rc IS RECORD (code NUMBER, message VARCHAR2(4000));
    TYPE t_errm_nt IS TABLE OF t_errm_rc;
    FUNCTION fn_errm RETURN t_errm_nt PIPELINED;
END pg_errm;
/

CREATE OR REPLACE PACKAGE BODY pg_errm
IS
    FUNCTION fn_errm RETURN t_errm_nt PIPELINED
    IS
        l_errm t_errm_rc;
    BEGIN
        FOR i IN 1 .. 19999
        LOOP
            l_errm.code := i;
            l_errm.message := SQLERRM (-i);
            IF (l_errm.message NOT LIKE '%Message%not%found%') THEN PIPE ROW (l_errm); END IF;
        END LOOP;
    END fn_errm;
END pg_errm;
/


TABLE 컬렉션 표현식을 사용하면 아래와 같이 에러 메시지를 조회할 수 있다.

-- 2
SELECT * FROM TABLE (pg_errm.fn_errm) WHERE ROWNUM <= 10;

CODE MESSAGE
---- -------------------------------------------------------------------------------
   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를 영문으로 변경하면 영문 에러 메시지를 조회할 수 있다.

-- 3
ALTER SESSION SET nls_language = 'AMERICAN';

SELECT * FROM TABLE (pg_errm.fn_errm) WHERE ROWNUM <= 10;

CODE MESSAGE
---- -------------------------------------------------------------------------------
   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 > Administration' 카테고리의 다른 글

CLOB #1 - BASICFILE vs SECUREFILE  (0) 2018.06.23
UNIQUE 인덱스와 NON-UNIQUE 인덱스  (0) 2018.06.18
오라클 에러 테이블  (0) 2018.03.01
PK 제약조건과 인덱스 #2  (0) 2014.05.06
INVISIBLE 칼럼  (0) 2014.05.03
Posted by 정희락_