728x90

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
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ORA-00936 : 오류의 정확한 원인과 실무 적용 해결 전략 (0) | 2025.07.27 |
|---|---|
| [ORACLE] ORA-00918 : 오류 원인과 해결 방법 완전 정복 (0) | 2025.07.27 |
| [ORACLE] ORA-00902 : 원인 사례 별 진단 및 실무 해결 전략 (0) | 2025.07.27 |
| [ORACLE] ORA-00900 : SQL command not properly ended 오류의 원인과 해결 전략 (0) | 2025.07.27 |
| [ORACLE] ORA-00600 : 원인 분석과 실무 중심의 해결 전략 (0) | 2025.07.27 |