본문 바로가기
Database/Oracle

[ORACLE] ORA-00902 : 원인 사례 별 진단 및 실무 해결 전략

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

ORA-00902 오류 : 원인 사례 별 진단 및 실무 해결 전략
[ORACLE] ORA-00902

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