Oracle Database 23c의 새로운 기능에 대한 Boolean 데이터 유형

Oracle 데이터베이스 23c는 다른 기본 제공 유형처럼 사용할 수 있는 새로운 SQL 부울(부울) 데이터 유형을 도입했습니다. 실제로 PL/SQL은 수년 전부터 부울 데이터 유형을 지원했습니다.

부울 필드

부울 데이터 유형은 키워드 BOOLEAN 또는 BOOL을 사용하여 지정됩니다. 예를 들면 다음과 같습니다.

drop table if exists boolean_test purge;

create table boolean_test (
  id        number generated always as identity,
  active    boolean,
  archived  bool
);

그중 drop table if exists 도 이 버전의 새로운 기능입니다.

Boolean 데이터에 값을 할당하는 방법에는 여러 가지가 있습니다. 다음 명령문은 활성 플래그를 true로, 아카이브된 플래그를 false로 설정할 수 있습니다.

insert into boolean_test (active, archived) values (true, false);
insert into boolean_test (active, archived) values (TRUE, FALSE);

insert into boolean_test (active, archived) values ('true', 'false');
insert into boolean_test (active, archived) values ('TRUE', 'FALSE');

insert into boolean_test (active, archived) values ('yes', 'no');
insert into boolean_test (active, archived) values ('YES', 'NO');

insert into boolean_test (active, archived) values ('on', 'off');
insert into boolean_test (active, archived) values ('ON', 'OFF');

insert into boolean_test (active, archived) values (1, 0);
insert into boolean_test (active, archived) values ('1', '0');

insert into boolean_test (active, archived) values ('t', 'f');
insert into boolean_test (active, archived) values ('T', 'F');

insert into boolean_test (active, archived) values ('y', 'n');
insert into boolean_test (active, archived) values ('Y', 'N');

commit;

데이터 쿼리:

select * from boolean_test;

        ID ACTIVE      ARCHIVED
---------- ----------- -----------
         1 TRUE        FALSE
         2 TRUE        FALSE
         3 TRUE        FALSE
         4 TRUE        FALSE
         5 TRUE        FALSE
         6 TRUE        FALSE
         7 TRUE        FALSE
         8 TRUE        FALSE
         9 TRUE        FALSE
        10 TRUE        FALSE
        11 TRUE        FALSE
        12 TRUE        FALSE
        13 TRUE        FALSE
        14 TRUE        FALSE

14 rows selected.

이전 버전의 SQL*Plus 및 SQLcl 23.1 이하 버전은 true를 1로, false를 0으로 표시합니다. 그들이 사용하는 드라이버가 참/거짓을 지원하지 않기 때문입니다. 이후 버전은 정상적으로 표시됩니다.

부울 유형의 필드는 NOT NULL 제약 조건이 정의되지 않은 한 null 값도 지원합니다.

insert into boolean_test (active, archived) values (null, null);
commit;

select *
from   boolean_test
where  active is null;
        ID ACTIVE      ARCHIVED
---------- ----------- -----------
        15


delete from boolean_test
where  active is null;
commit;

부울 필드는 NOT NULL 및 CHECK 제약 조건뿐만 아니라 UNIQUE, PRIMARY KEY 또는 FOREIGN KEY 제약 조건의 일부로도 정의할 수 있습니다.

SQL 지원

부울 식은 다른 식처럼 사용할 수 있습니다. 여기 몇 가지 예가 있어요.

select count(*)
from   boolean_test
where  active;

  COUNT(*)
----------
        14

select count(*)
from   boolean_test
where  active is true;

  COUNT(*)
----------
        14

select count(*)
from   boolean_test
where  active and not archived;

  COUNT(*)
----------
        14

select count(*)
from   boolean_test
where  active or archived;

  COUNT(*)
----------
        14

select count(*)
from   boolean_test
where  active is null;

  COUNT(*)
----------
         0

select count(*)
from   boolean_test
where  active > archived;

  COUNT(*)
----------
        14

새 버전에는 숫자나 문자를 부울 값으로 변환할 수 있는 TO_BOOLEAN 함수도 추가되었습니다. 동시에 Boolean 유형을 지원하는 TO_NUMBER, TO_CHAR 및 TO_NCHAR 함수가 오버로드됩니다.

select to_boolean('true'),
       to_boolean('false'),
       to_number(active),
       to_number(archived),
       to_char(active),
       to_char(archived),
       to_nchar(active),
       to_nchar(archived)
from   boolean_test
where  id = 1;

TO_BOOLEAN( TO_BOOLEAN( TO_NUMBER(ACTIVE) TO_NUMBER(ARCHIVED) TO_CH TO_CH TO_NC TO_NC
----------- ----------- ----------------- ------------------- ----- ----- ----- -----
TRUE        FALSE                       1                   0 TRUE  FALSE TRUE  FALSE

PL/SQL 지원

PL/SQL은 오랫동안 Boolean 유형을 지원했으며 새 버전은 Boolean 데이터의 지속성을 지원할 수 있습니다.

declare
  l_active    boolean := true;
  l_archived  boolean := false;
begin
  insert into boolean_test (active, archived)
  values (l_active, l_archived);

  commit;
end;
/

PL/SQL procedure successfully completed.

위에서 언급한 TO_BOOLEAN 함수는 PL/SQL에서도 사용할 수 있습니다.

declare
  l_true    boolean;
  l_false   boolean;
begin
  -- Work
  l_true  := to_boolean('true');
  l_false := to_boolean('false');
end;
/

다른 오버로드된 변환 함수는 기본적으로 PL/SQL에서 사용할 수 없지만 초기화 매개변수 PLSQL_IMPLICIT_CONVERSION_BOOL을 시스템 또는 세션 수준에서 true로 설정해야 합니다.

alter session set plsql_implicit_conversion_bool=true;

declare
  l_true    boolean := true;
  l_false   boolean := false;
  l_number  number;
begin
  l_number := to_number(l_true);
  l_number := to_number(l_false);
end;
/

declare
  l_true    boolean;
  l_false   boolean;
  l_string  varchar2(5);
begin
  l_string := to_char(l_true);
  l_string := to_char(l_false);
end;
/

declare
  l_true    boolean;
  l_false   boolean;
  l_string  nvarchar2(5);
begin
  l_string := to_nchar(l_true);
  l_string := to_nchar(l_false);
end;
/

Guess you like

Origin blog.csdn.net/horses/article/details/130070703