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:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함