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

koyama mlus @ hintmark.com
2007年 6月 13日 (水) 13:39:44 JST


xeon-koyamaです

板垣さん、ご返答ありがとうございます。

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

そうだったんですか。知りませんでした。
なるほど、それでエラーが出てくるのですね。


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

ありがとうございます。この関数、ありがたく使わせて頂きます。

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

そうですか、楽になりますね。


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

AFTER INSERT トリガでの関数で使っているからですかね?

DECLARA
  AAA :TEXT
  BEGIN
    IF NEW.data THEN
      AAA := 'TRUE';
    ELSE
      AAA := 'FALSE';
    END IF;

これの場合は、問題なくトリガが終了してます。











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