ブール値を出力しようとしているサンプルコードがあります。エラーが発生しました。
'PUT_LINE'の呼び出しの引数の数またはタイプが間違っています
'TO_CHAR'の呼び出しの引数の数またはタイプが間違っています
DECLARE
status BOOLEAN:= false;
BEGIN
DBMS_OUTPUT.PUT_LINE(status);
DBMS_OUTPUT.PUT_LINE(to_char(status));
END;
エラーメッセージから、両方の方法(暗黙的、明示的)でブールを文字に変換できないことは明らかです。
なぜそれは不可能ですか?
具体的な理由はありますか?または、Oracleはこのタイプの変換を忘れただけです(めったにありません)。
変換する他の方法はありますか?または、IF
またはCASE
ステートメントを探して、status
の内容を推測する必要がありますか。
varchar
とboolean
を連結できないようです。
この関数を定義します。
CREATE OR REPLACE FUNCTION BOOLEAN_TO_CHAR(STATUS IN BOOLEAN)
RETURN VARCHAR2 IS
BEGIN
RETURN
CASE STATUS
WHEN TRUE THEN 'TRUE'
WHEN FALSE THEN 'FALSE'
ELSE 'NULL'
END;
END;
次のように使用します:
DBMS_OUTPUT.PUT_LINE('status'|| BOOLEAN_TO_CHAR(status));
ブール変数を印刷することはできません。そのためには、関数を作成するか、caseステートメントを使用します。
Oracle SQLには、ブールデータ型はありません。そのPL/SQLデータ型。つまり、テーブル列のデータ型として使用することはできません。
なぜそれは不可能ですか?
たぶん、ANSIがないからです。
別の方法として、SYS.DIUTILパッケージのBOOL_TO_INT()
関数を使用しています。
DECLARE
status BOOLEAN:= false;
BEGIN
DBMS_OUTPUT.PUT_LINE(sys.diutil.bool_to_int(status));
END;
これは、true
の場合は1
およびfalse
の場合は0
(およびnull
の場合はnull
)を返します。