[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 メーリングリストの案内