[pgsql-jp: 38492] Re: PLpgsql言語とBoolean型

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2007年 6月 13日 (水) 13:09:21 JST


板垣です。

koyama <mlus @ hintmark.com> wrote:

> 関数の中で、Boolean型データを文字列に変換する必要があるのですが、
> どうやったら良いのでしょうか?

boolean型からtext型へのキャストは始めからは用意されていませんので、
自分で追加する必要があります。(pl/pgsql に限定した話ではありません)

# SELECT 1::boolean::text, 0::boolean::text;
ERROR:  cannot cast type boolean to text
LINE 1: SELECT 1::boolean::text, 0::boolean::text;

# CREATE FUNCTION boolean_text(boolean) RETURNS text AS
        $$ SELECT CASE WHEN $1 THEN 'true' ELSE 'false' END; $$
        IMMUTABLE RETURNS NULL ON NULL INPUT LANGUAGE sql;
# CREATE CAST (boolean AS text) WITH FUNCTION boolean_text(boolean);

# SELECT 1::boolean::text, 0::boolean::text;
 text | text
------+-------
 true | false
(1 row)


ちなみに、次期版の8.3では、予め用意されるようになりました。
ただ、変換後のテキストは、true/false (小文字)になるので注意してください。
(SQL標準に従うのならば、本来は大文字 TRUE/FALSE に変換すべきらしいです。)


>      AAA := CAST(NEW.data AS TEXT);
> ------- でやると
> ERROR: operator does not exist: text || boolean
> と表示されます。

ただ、指摘されている箇所と、エラーメッセージの内容に
食い違いがあることが気がかりではあります。
もしキャストでエラーになっているのならば、メッセージは
  ERROR:  cannot cast type boolean to text
になるはずなのですが。




pgsql-jp メーリングリストの案内