ORA-00904: 부적합한 식별자 해결하기 (ORA-00904: invalid identifier)

ORA-00904: 부적합한 식별자 (ORA-00904: invalid identifier) 오류에 대한 원인과 해결 방법을 알아봅시다.

  • 테이블에 존재하지 않는 컬럼을 지정한 경우
  • 정의한 열 이름과 대소문자가 불일치하는 경우
  • 작은 따옴표와 큰 따옴표의 사용 실수
  • 특수 문자 또는 예약어(reserved word)를 컬럼 이름으로 사용하는 경우

ORA-00904: 부적합한 식별자 해결하기

테이블에 존재하지 않는 컬럼

컬럼을 오타로 잘못 입력하였거나 컬럼의 이름이 변경된 경우입니다. 테이블에 대한 디스크라이브 또는 다음의 쿼리를 통해 테이블에 속해 있는 컬럼의 이름을 확인할 수 있습니다.

SELECT *
  FROM DBA_TAB_COLUMNS
 WHERE OWNER = 'USERNAME' AND TABLE_NAME = 'TABLE_NAME';

정의한 열 이름과 대소문자가 불일치 하는 경우

따옴표(" : double quote)로 컬럼 이름을 정의하는 경우 등은 컬럼의 대소문자를 구분합니다. 다음의 예제는 인라인뷰에서 "ColumnAlias"로 컬럼 이름을 지정하였으나 외부에서 "columnalias" 컬럼을 조회하려고 하였을 때 오류가 발생합니다.

SELECT "columnalias"
  FROM (SELECT COLUMN_NAME AS "ColumnAlias" FROM TABLE_NAME);

SELECT "columnalias"
       *
1행에 오류:
ORA-00904: "columnalias": 부적합한 식별자

작은 따옴표와 큰 따옴표의 사용 실수

작은 따옴표(' : single quote)는 문자열 변수를 지칭하고 큰 따옴표(" : double quote)는 식별자를 지정합니다. 다음 예제는 싱글, 더블 쿼트의 잘못된 사용 예제입니다.

SELECT COLUMN_NAME
  FROM (SELECT 'COLUMN_NAME' FROM DUAL);

SELECT COLUMN_NAME
       *
1행에 오류:
ORA-00904: "COLUMN_NAME": 부적합한 식별자

특수 문자 또는 예약어(reserved word)를 컬럼 이름으로 사용하는 경우

컬럼 이름에는 특수 문자와 예약어를 사용할 수 없습니다. 해당의 경우에도 ORA-00904: invalid identifier 오류가 발생할 수 있습니다. 다음은 예약어 COLUMN을 컬럼 이름으로 추가하려고 시도할 때 발생하는 예제입니다.

--예약어를 컬럼 이름으로 사용하여 오류가 발생합니다.
ALTER TABLE TABLE_NAME ADD COLUMN VARCHAR2(1);

1행에 오류:
ORA-00904: : 부적합한 식별자

--올바른 컬럼 이름을 사용하여 정상적으로 테이블이 변경되었습니다.
ALTER TABLE TABLE_NAME ADD COLUMN_NAME VARCHAR2(1);

테이블이 변경되었습니다.

오라클 예약어를 조회하는 방법

오라클 예약어는 다음의 시스템 뷰에서 조회할 수 있습니다. 예약어를 객체명으로 만드는 것은 권장하지 않습니다.

SELECT * FROM V$RESERVED_WORDS;

댓글