Oracle Database 23cの新機能のブールデータ型

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
);

このうち、テーブルが存在する場合はドロップする機能もこのバージョンの新機能です。

ブール データに値を割り当てる方法は数多くありますが、次のステートメントでは、アクティブ フラグを 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 として表示されます。使用するドライバーが true/false をサポートしていないためです。それ以降のバージョンでは正常に表示されます。

ブール型のフィールドは、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関数も追加されています。同時に、ブール型をサポートする 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 は長い間ブール型をサポートしてきましたが、新しいバージョンではブール データの永続性をサポートできるようになりました。

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;
/

おすすめ

転載: blog.csdn.net/horses/article/details/130070703