[Oracle] boolean type, ORA-00902: invalid datatype 해결하기

Oracle에서 boolean 자료형(data type)을 어떻게 사용할까요? 우선 boolean은 기본 오라클 데이터베이스 관리 시스템에서 제공하는 자료형이 아닙니다. 그렇기에 다음과 같이 테이블 생성 시 boolean 타입을 선언하면 ORA-00902: invalid datatype 오류가 발생합니다.

Oracle boolean type

CREATE TABLE USER_NAME.TABLE_NAME (
     COLUMN_NAME BOOLEAN
 )
 TABLESPACE TABLESPACE_NAME
 PCTUSED 0
 PCTFREE 10
 INITRANS 1
 MAXTRANS 255
 STORAGE (INITIAL 64 M
          NEXT 1 M
          MINEXTENTS 1
          MAXEXTENTS UNLIMITED
          PCTINCREASE 0
          BUFFER_POOL DEFAULT)
 LOGGING
 NOCOMPRESS
 NOCACHE
 NOPARALLEL
 MONITORING;

---------------------------
COLUMN_NAME BOOLEAN
ERROR at line 2:
ORA-00902: invalid datatype

BOOLEAN 타입은 PL/SQL에서 사용할 수 있으며, 다른 개발환경과 연동 작업 시 PL/SQL Data Type으로 보이는 경우도 있습니다.

BOOLEAN

[Oracle] boolean type, ORA-00902: invalid datatype 해결하기

이번에 외부 연계 작업을 하는데, 해당 업체에서 계속 오류가 발생한다고 분석의뢰를 하여 보았더니 boolean 변수가 문제인 것을 확인하였습니다. 해당 프로그램에서 오라클 boolean을 할당하는 다른 변수 타입을 설정해야 하거나, 처음부터 설정이 되지 않아서 boolean으로 자료를 제공하면 안 되었을 가능성으로 보입니다. 다만, 빠른 처리를 원하여 더 정확한 분석은 하지 않았고, 우선 boolean을 제외하는 쪽으로 진행하였습니다.

오라클에서 boolean 타입은 값을 할당하지 않으면 기본값은 NULL입니다. 그리하여 NULL을 출력하려면 CASE, DECODE, IF 등으로 자료를 확인해야 합니다.

SET SERVEROUTPUT ON

 DECLARE
    BS   BOOLEAN;
 BEGIN
    BS := FALSE;
    DBMS_OUTPUT.PUT_LINE (
       CASE WHEN BS IS NULL THEN 'NULL' WHEN BS THEN 'TRUE' ELSE 'FALSE' END);
 END;
 /
 
----------------------------------------
FALSE

PL/SQL procedure successfully completed.
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗