ORA-00904: 부적합한 식별자 (ORA-00904: invalid identifier) 오류에 대한 원인과 해결 방법을 알아봅시다.
- 테이블에 존재하지 않는 컬럼을 지정한 경우
- 정의한 열 이름과 대소문자가 불일치하는 경우
- 작은 따옴표와 큰 따옴표의 사용 실수
- 특수 문자 또는 예약어(reserved word)를 컬럼 이름으로 사용하는 경우
테이블에 존재하지 않는 컬럼
컬럼을 오타로 잘못 입력하였거나 컬럼의 이름이 변경된 경우입니다. 테이블에 대한 디스크라이브 또는 다음의 쿼리를 통해 테이블에 속해 있는 컬럼의 이름을 확인할 수 있습니다.
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;