web-dev-qa-db-ja.com

ブール値からVarchar2への変換

ブール値を出力しようとしているサンプルコードがあります。エラーが発生しました。

'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の内容を推測する必要がありますか。

11
Narasimha Maiya

varcharbooleanを連結できないようです。

この関数を定義します。

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

ブール変数を印刷することはできません。そのためには、関数を作成するか、caseステートメントを使用します。

Oracle SQLには、ブールデータ型はありません。そのPL/SQLデータ型。つまり、テーブル列のデータ型として使用することはできません。

なぜそれは不可能ですか?

たぶん、ANSIがないからです。

2
Nitish

別の方法として、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)を返します。

0
Akro