ORA-00904: 부적합한 식별자 (invalid identifier)

스폰서 링크
Oracle DB
스폰서 링크

이 글에서는 열명에 대한 다음 오류에 대해서 알아 보겠습니다.

  • 정의되지 않은 열명 지정
  • 열명 대소문자 불일치
  • 작은 따옴표(‘)에 큰 따옴표(“)사용
  • 열명 선두에 특수 문자를 사용
  • 열명 예약어 사용
스폰서 링크

조사 환경

이 글은 “Windows10 Pro에서 무상으로 이용가능한 Oracle Database Express Edition 18c 설치하기” 글에서 작성한 XEPDB1 플러그인 데이터베이스(PDB) 환경에서 조사했습니다.

scott/tiger접속을 위해서는 “연습 데이터용 샘플 스키마 “SCOTT” 작성하기” 글을 참조하십시오.

그외 이하 환경에서도 연습할 수 있습니다.

Windows Server 2012 R2에서 Oracle Database 12.2.0.1.0 for Microsoft Windows x64 설치 하기
Windows Server 2019 에서 Oracle Database 19c for Microsoft Windows x64 설치 하기

정의되지 않은 열명 오류

다음과 같이 JOB항목명을 GOB로잘못 지정해서 오류가 발생합니다.

한글 오류 메시지

C:\>set nls_lang=KOREAN_KOREA.KO16MSWIN949
C:\>sqlplus scott/tiger@localhost/xepdb1
SQL> desc emp
 Name           Null?    Type
 --------- -------- -------------
 EMPNO     NOT NULL NUMBER(4)
 ENAME              VARCHAR2(10)
 JOB                VARCHAR2(9)
 MGR                NUMBER(4)
 HIREDATE           DATE
 SAL                NUMBER(7,2)
 COMM               NUMBER(7,2)
 DEPTNO             NUMBER(2)

SQL> select GOB from EMP;
select GOB from EMP
       *
1행에 오류:
ORA-00904: "GOB": 부적합한 식별자

영문 오류 메시지

C:\>set nls_lang=American_America.AL32UTF8
C:\>sqlplus scott/tiger@localhost:1521/XEPDB1
SQL> select GOB from EMP;
select GOB from EMP
       *
ERROR at line 1:
ORA-00904: "GOB": invalid identifier

정상 종류

존재하는 JOB항목명을 사용하면 정상 종료합니다.

SQL> select JOB from EMP;
JOB
---------
CLERK
... 중간 생략 ...
15 rows selected.

열명 대소문자 불일치

오류 샘플

SQL> select "job" from EMP;
select "job" from EMP
       *
ERROR at line 1:
ORA-00904: "job": invalid identifier

정장 샘플

SQL> select "JOB" from EMP;
JOB
---------
CLERK
... 중간 생략 ...
15 rows selected.

작은 따옴표(‘)에 큰 따옴표(“)사용

“” 큰 따옴표(“) 는 열명에 대/소문자 구분과 공백 문자를 위해 사용합니다. 아래 오류에서는 “CLERK”는 항목명으로 인식했습니다.

오류 샘플

SQL> select JOB from EMP WHERE JOB = "CLERK";
select JOB from EMP WHERE JOB = "CLERK"
                                *
ERROR at line 1:
ORA-00904: "CLERK": invalid identifier

정장 샘플

SQL> select JOB from EMP WHERE JOB = 'CLERK';
JOB
---------
CLERK
... 중간 생략 ...

열명 선두에 특수 문자를 사용

열명 선두는 영문자 만 사용할 수 있습니다.

오류 샘플

SQL> CREATE TABLE TEST ( 1item number);
CREATE TABLE TEST ( 1item )
                    *
ERROR at line 1:
ORA-00904: : invalid identifier

정장 샘플

SQL> CREATE TABLE TEST ( item1 number);
Table created.

열명 예약어 사용

from는 예약어 입니다. 예약어를 항목명으로 사용할 수 없습니다.

오류 샘플

SQL> CREATE TABLE TEST2 ( from number);
CREATE TABLE TEST2 ( from number)
                     *
ERROR at line 1:
ORA-00904: : invalid identifier

정장 샘플

SQL> CREATE TABLE TEST2 ( from_no number);
Table created.
제목과 URL을 복사했습니다