728x90

1. ORA-00902 오류란 무엇인가?
ORA-00902: "invalid datatype" 오류는 Oracle SQL에서 지원하지 않는 데이터 타입을 사용했을 때 발생하는 오류입니다. 이 오류는 단순히 잘못된 타입명을 사용했을 때만이 아니라, 타입의 문법이 틀리거나 특정 문맥에서 허용되지 않는 경우에도 발생할 수 있습니다.
2. 주요 원인 분석
- 비정상적인 데이터 타입 선언: 예: `NUMBER(10,10,10)`처럼 Oracle에서 허용되지 않는 형식.
- 사용할 수 없는 사용자 정의 타입: PL/SQL에서 정의된 Object Type을 SQL에서 사용할 수 없을 때.
- DDL 문에서의 오류: CREATE TABLE, ALTER TABLE 등에서 사용되는 타입이 Oracle이 허용하는 범위를 벗어날 경우.
- 라이브러리 버전 불일치: 클라이언트 툴과 서버 버전이 다를 경우 지원되는 타입이 달라 발생.
- 패키지 또는 함수 내 잘못된 선언: 프로시저/펑션에서 타입 선언이 문법에 맞지 않음.
3. 자주 발생하는 시나리오 예시
-- 잘못된 예시
CREATE TABLE emp_test (
id NUMBER(10,2,1), -- 소수점 precision이 2개 이상 지정됨
name STR(100) -- Oracle에는 STR이라는 타입이 없음
);
해결 방법:
-- 수정된 예시
CREATE TABLE emp_test (
id NUMBER(10,2),
name VARCHAR2(100)
);
4. 사용자 정의 타입 관련 오류
사용자 정의 Object Type을 SQL 문에서 직접 사용하는 경우 ORA-00902 오류가 발생할 수 있습니다. 이럴 때는 PL/SQL 컨텍스트 내에서만 해당 타입을 사용하거나, SQL에서 지원하는 구조체 타입을 대신 사용해야 합니다.
-- PL/SQL 내 정의
CREATE OR REPLACE TYPE emp_type AS OBJECT (
id NUMBER,
name VARCHAR2(100)
);
-- SQL에서 직접 사용 시 오류 발생
CREATE TABLE emp_obj_tab (
emp_info emp_type -- ORA-00902 오류 발생 가능
);
5. 해결 전략 요약
| 시나리오 | 원인 | 해결 방법 |
|---|---|---|
| 데이터 타입 오탈자 | 지원되지 않는 타입명 사용 | Oracle 문서 기준 타입 사용 (예: STR → VARCHAR2) |
| NUMBER 정의 오류 | 잘못된 precision/scale 사용 | NUMBER(p,s) 형식으로 제한 |
| Object Type 사용 | SQL 문장에서 직접 사용 | PL/SQL 컨텍스트 또는 컬렉션 형태로 변환 |
| 라이브러리/버전 문제 | 클라이언트-서버 버전 차이 | 양쪽 버전 일치 여부 확인 |
6. 실무적 팁 및 예방 전략
- DDL/DML 작성 시 항상 Oracle 공식 문서를 참고하여 타입 정의.
- SQL Developer나 TOAD와 같은 도구에서 컴파일 전 구문 체크 기능 활용.
- 자주 쓰는 데이터 타입은 템플릿 또는 라이브러리화하여 재사용.
- 테스트 DB에서 먼저 검증 후 운영환경 반영.
- 객체 타입 사용 시 VIEW 또는 중간 매핑 테이블을 통해 SQL 접근.
7. 관련 자료 및 참고 문헌
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ORA-00918 : 오류 원인과 해결 방법 완전 정복 (0) | 2025.07.27 |
|---|---|
| [ORACLE] ORA-00904 : 원인과 실무 중심의 해결 가이드 (0) | 2025.07.27 |
| [ORACLE] ORA-00900 : SQL command not properly ended 오류의 원인과 해결 전략 (0) | 2025.07.27 |
| [ORACLE] ORA-00600 : 원인 분석과 실무 중심의 해결 전략 (0) | 2025.07.27 |
| [ORACLE] USER_REFRESH_CHILDREN : Refresh 그룹 구성요소 추적과 실전 활용 (0) | 2025.07.19 |