에러 메시지 개선

2023. 4. 25.·Oracle/SQL

DOAG 2022에서 Gerald Venzl가 발표한 New and cool features for developers in Oracle database 프리젠테이션에 Oracle 23c부터 에러 메시지가 개선된다는 내용이 포함되어 있습니다. 참고로 이 내용은 New Features Guide에 포함되어 있지 않습니다.

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);

 

아래 쿼리로 ORA-00979 에러 메시지가 개선된 것을 볼 수 있습니다.

-- 2-1: 23.2
SELECT   c1, c2
    FROM t1
GROUP BY c1;

ORA-00979: "C2": GROUP BY 표현식과 일치하지 않음

-- 2-2: 19.3
SELECT   c1, c2
    FROM t1
GROUP BY c1;

ORA-00979: GROUP BY 표현식이 아닙니다.

 

아래 패키지로 23.2 버전과 19.3 버전의 에러 메시지를 비교해보면 1,221개의 에러 메시지가 변경된 것을 확인할 수 있습니다.

-- 3-1
CREATE OR REPLACE PACKAGE pkg_errm
IS
    TYPE trd_errm IS RECORD (code NUMBER, message VARCHAR2(4000));
    TYPE tnt_errm IS TABLE OF trd_errm;
    
    FUNCTION fnc_errm
        RETURN tnt_errm PIPELINED;
END;
/

-- 3-2
CREATE OR REPLACE PACKAGE BODY pkg_errm
IS
    FUNCTION fnc_errm
        RETURN tnt_errm PIPELINED
    IS
        v_errm trd_errm;
    BEGIN
        FOR i IN 1 .. 65535
        LOOP
            v_errm.code := i;
            v_errm.message := SQLERRM (-i);
            
            IF (    v_errm.message NOT LIKE '%Message%not%found%'
                AND v_errm.message NOT LIKE '%non-ORACLE exception%')
            THEN
                PIPE ROW (v_errm);
            END IF;
        END LOOP;
    END;
END;
/

-- 3-3
SELECT * FROM TABLE (pkg_errm.fnc_errm);

 

참고로 23.2 버전에서는 프리젠테이션에 예시로 나왔던 4개의 에러 메시지 중 ORA-00979 에러 메시지만 개선된 것으로 보입니다.

 CODE MESSAGE_19C                                                          MESSAGE_23C
----- -------------------------------------------------------------------- --------------------------------------------------------------------
  942 ORA-00942: 테이블 또는 뷰가 존재하지 않습니다                        ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
  979 ORA-00979: GROUP BY 표현식이 아닙니다.                               ORA-00979: : GROUP BY 표현식과 일치하지 않음
 1722 ORA-01722: 수치가 부적합합니다                                       ORA-01722: 수치가 부적합합니다
12514 ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함 ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함
저작자표시 비영리 변경금지 (새창열림)
'Oracle/SQL' 카테고리의 다른 글
  • CLOB 값을 바이트 단위로 자르기
  • MERGE 문의 개별 Insert, Update 로우 수
  • Lock-Free Reservation #1
  • Table Value Constructor
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 주력해 왔으며, 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며, Oracle 사의 공식 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • Oracle (171)
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (5)
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
에러 메시지 개선
상단으로

티스토리툴바