본문 바로가기
Database/Oracle

[ORACLE] ORA-00904 : 원인과 실무 중심의 해결 가이드

by Papa Martino V 2025. 7. 27.
728x90

ORA-00904 : 원인과 실무 중심의 해결 가이드
[ORACLE] ORA-00904

1. ORA-00904 오류란?

ORA-00904 오류는 Oracle SQL에서 다음과 같이 출력됩니다: ORA-00904: "문자열": invalid identifier
이는 SQL 문에서 잘못된 식별자(identifier)를 사용했을 때 발생하는 오류입니다. 대부분의 경우, 컬럼명 오타나 존재하지 않는 컬럼을 참조할 때 나타납니다. 실무 환경에서 자주 발생하며, SQL 초급자뿐 아니라 숙련된 개발자도 간과하기 쉬운 문제입니다.

2. ORA-00904 오류의 주요 원인

  • 컬럼 이름 오타: 테이블에 존재하지 않는 컬럼명을 사용한 경우
  • 대소문자 구분 문제: 쿼리에서 큰따옴표로 감싼 컬럼명을 잘못 사용했을 경우
  • 컬럼명에 예약어 사용: Oracle에서 사용하는 키워드를 컬럼명으로 사용할 경우
  • 잘못된 별칭 사용: SELECT절에서 정의되지 않은 별칭(alias)을 WHERE절에서 참조했을 경우
  • 테이블 구조 변경 이후 캐시된 쿼리 사용: 스키마 변경 후 이전 SQL을 그대로 실행한 경우

3. 실전 사례 분석

-- 문제 예시
SELECT emp_id, empname FROM employees;

-- 발생 오류
ORA-00904: "EMPNAME": invalid identifier

-- 원인 분석
employees 테이블에는 empname이라는 컬럼이 존재하지 않고, 실제 컬럼명은 emp_name임

-- 해결 방법
SELECT emp_id, emp_name FROM employees;
      

4. 대소문자 및 따옴표 사용 문제

Oracle에서는 쿼리에서 큰따옴표로 감싼 식별자는 대소문자를 구분합니다. 다음은 잘못된 예입니다:

-- 문제 예시
CREATE TABLE test ("Name" VARCHAR2(100));
SELECT name FROM test;

-- 발생 오류
ORA-00904: "NAME": invalid identifier

-- 해결 방법
SELECT "Name" FROM test;
      

SQL 표준 스타일에서는 식별자에 따옴표를 사용하지 않는 것이 좋습니다.

5. ORA-00904 오류 원인 요약

오류 유형 설명 예방 또는 해결 방법
컬럼명 오타 존재하지 않는 컬럼명 입력 DESC 명령어로 테이블 구조 확인 후 쿼리 작성
대소문자 오류 "Name"과 name은 다르게 인식됨 식별자에 따옴표 사용 지양
별칭 오용 정의되지 않은 alias 참조 alias는 SELECT 이후 WHERE, GROUP BY에서 사용할 수 없음
예약어 사용 Oracle 예약어를 컬럼명으로 지정 컬럼명으로 예약어 사용 금지
스키마 변경 누락 삭제되거나 이름이 바뀐 컬럼 참조 최신 스키마 반영 필요

6. 실무에서의 디버깅 전략

  • 1. 테이블 구조 확인: DESC 테이블명; 명령어로 컬럼명 확인
  • 2. SQL 로그 추적: DBMS_OUTPUT이나 Oracle SQL Developer의 Query Log 활용
  • 3. 쿼리 단위 테스트: 복잡한 쿼리는 부분적으로 나눠서 테스트
  • 4. 뷰 또는 동적 SQL 검토: 하위 객체까지 명확히 추적
  • 5. 스키마 사용자 구분: 다른 스키마에 있는 동일 테이블명이 혼동을 줄 수 있음

7. 전문가 팁

  • 모든 SQL은 명확하고 완전하게 작성하는 것이 원칙입니다.
  • SELECT * 구문은 사용을 지양하고, 명시적으로 컬럼명을 기재하세요.
  • DB 구조 변경이 자주 발생하는 환경에서는 ERD 및 문서화가 필수입니다.
  • 컬럼명이 자주 바뀐다면 View로 추상화하여 SQL 변경 최소화가 효과적입니다.

8. 참고 자료

728x90