ORA-00984: 열을 사용할 수 없습니다 해결 방법 (ORA-00984: column not allowed here)

ORA-00984: 열을 사용할 수 없습니다 (column not allowed here) 오류 해결 방법은 인서트 구문에서 VALUES절에 사용된 컬럼을 바르게 수정하는 것입니다.

테이블에서 실제 컬럼의 존재 여부와 관계없이 식별자를 작성하는 경우에 발생하는 문제이기 때문입니다.

'column not allowed here'은 '열을 사용할 수 없습니다.' 보다는 '해당 컬럼은, 해당 위치에서 허용되지 않습니다.'라고 이해하시는 게 좋을 것입니다. 번역이 좀 잘못된듯한데, 오라클 버전이 올라가면 나중에는 조금 더 자연스런 해석본이 추가되리라 봅니다.

ORA-00984: 열을 사용할 수 없습니다 해결 방법

ORA-00984: 열을 사용할 수 없습니다 해결하기

예를 들면, 테이블 table_name에는 column_name 컬럼이 하나가 있다고 가정해 봅시다.

--테이블: table_name
--컬럼(1개): column_name

SELECT * FROM table_name;

COLUMN_NAME
-----------
          1

ORA-00984 오류는 컬럼 이름을 그대로 사용할 때에도 발생합니다. column_name에 column_name을 입력하도록 하면 다음 예제와 같이 오류가 발생합니다.

SQL> INSERT INTO table_name (column_name)
          VALUES (column_name);

2행에 오류:
ORA-00984: 열을 사용할 수 없습니다

존재하지 않는 컬럼을 지정해도 동일하게 발생합니다. col 이라는 컬럼은 테이블에 없으나 다음과 같이 "ORA-00984: 열을 사용할 수 없습니다"라고 오류를 표시합니다.

SQL> INSERT INTO USERNAME.TABLE_NAME (COLUMN_NAME)
          VALUES (col);

ORA-00984: 열을 사용할 수 없습니다

인서트 문을 실제로 작성할 때보다는, 프로그래밍 방식으로 입력 부분을 제어할 때 문제가 생길 가능성이 있으니, 해당 부분을 점검해 주세요.

  • VALUES 절에 설정한 문자열에 대해 아포스트로피를 실수로 생략한 경우, 보통 둘 다 생략하여 오라클에서 컬럼으로 인식한 경우입니다.
  • 작은 따옴표 대신 큰 따옴표를 사용한 경우
  • 오라클에서 기본적으로 제공하는 예약어, 내장 함수를 사용할 때에 오타를 입력한 경우
  • INSERT 절에도 COLUMN_NAME, VALUES 절에도 COLUMN_NAME을 입력한 경우
  • 존재하지 않는 컬럼을 설정하는 경우(예약어 오타로 이러한 경우)

댓글