3.2 BOOLEANデータ型

PL/SQLのデータ型BOOLEANには、論理値(ブール値のTRUEFALSE、およびNULL値)が格納されます。NULLは、不明な値を表します。

BOOLEAN変数を宣言するための構文は、次のとおりです。

variable_name BOOLEAN

BOOLEAN変数に代入できる値はBOOLEAN式のみです。詳細は、「ブール式」を参照してください。

SQLにはBOOLEANに相当するデータ型がないため、次の操作は実行できません。

  • データベース表の列にBOOLEAN値を割り当てる操作

  • データベース表の列の値を選択またはフェッチしてBOOLEAN変数に入れる操作

  • SQLファンクションでBOOLEAN値を使用する操作

    (ただし、「例3-3」に示すように、SQL問合せはBOOLEANパラメータを持つPL/SQLファンクションを起動できます。)

  • SQL文(SQL問合せで起動されるPL/SQLファンクションの引数を除く)またはPL/SQL無名ブロックでのBOOLEAN式の使用

    ノート:

    静的SQL問合せで起動されるPL/SQLファンクションの引数は、BOOLEANリテラルにできません。これを回避するには、「例3-3」に示すように、リテラルを変数に割り当ててからその変数をファンクションに渡します。

BOOLEAN値は、DBMS_OUTPUT.PUTサブプログラムまたはDBMS_OUTPUT.PUTLINEサブプログラムに渡せません。BOOLEAN値を出力するには、IF文またはCASE文を使用して値を文字値に変換します(これらの文の詳細は、「条件付き選択文」を参照してください)。

例3-2 BOOLEAN値の出力

この例では、プロシージャは、BOOLEANパラメータを受け取り、CASE文を使用して、値がNULLならUnknownを、TRUEならYesを、FALSEならNoを出力します。

関連項目:

例2-34を参照してください。この例では、IF文を使用してprint_booleanプロシージャを作成しています。

PROCEDURE print_boolean (b BOOLEAN)
AS
BEGIN
  DBMS_OUTPUT.PUT_LINE (
    CASE
      WHEN b IS NULL THEN 'Unknown'
      WHEN b THEN 'Yes'
      WHEN NOT b THEN 'No'
    END
  );
END;

BEGIN
  print_boolean(TRUE);
  print_boolean(FALSE);
  print_boolean(NULL);
END;

結果:

Yes
No
Unknown

例3-3 SQL文からのBOOLEANパラメータを持つPL/SQLファンクションの起動

この例では、SQL文により、BOOLEANパラメータを持つPL/SQLファンクションが起動されます。

FUNCTION f (x BOOLEAN, y PLS_INTEGER)
  RETURN employees.employee_id%TYPE
  AUTHID CURRENT_USER AS
BEGIN
  IF x THEN
    RETURN y;
  ELSE
    RETURN 2*y;
  END IF;
END;
 
DECLARE
  name employees.last_name%TYPE;
  b BOOLEAN := TRUE;
BEGIN
  SELECT last_name INTO name
  FROM employees
  WHERE employee_id = f(b, 100);
 
  DBMS_OUTPUT.PUT_LINE(name);
 
  b := FALSE;
 
  SELECT last_name INTO name
  FROM employees
  WHERE employee_id = f(b, 100);
 
  DBMS_OUTPUT.PUT_LINE(name);
END;
/

結果:

King
Whalen