[pgsql-jp: 35176] Re: PL/pgSQLの再帰処理の基本について

ISHIDA Akio iakio @ mono-space.net
2005年 4月 4日 (月) 16:16:00 JST


こんにちは。石田@苫小牧市です。

試してませんが、気になったことを2点ほど。

小川 修 wrote:
> -------------------------------------------------------------
> CREATE OR REPLACE FUNCTION "public"."func_test" (integer) RETURNS boolean
> AS'
> declare
> var1 alias for $1;
> var_id integer;
> var_record record;
> begin
> --引数のidのflagを1に変更
> UPDATE test set flag=1 where id=var1;
> --子階層を検索
> FOR var_record IN select * from test where parent=var1 LOOP
>     var_id:=var_record."id";
>     --子階層のidを引数として、再帰呼び出しを実行
>     execute func_test(var_id);
> END LOOP;
> return;
> end;
> 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
> --------------------------------------------------------------

execute func_test(var_id); ではなく、
perform func_test(var_id); ではどうでしょうか?

> また
> 戻り値にbooleanを指定している為、return true;と記述すると
> ---------------------------------------------------------------
(中略)
> return true;
> end;
> 'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
> --------------------------------------------------------------------
> ERROR:  syntax error at or near "t" at character 1
> のエラーが発生します。

return 't'; か
return 't'::boolean; ではどうでしょうか?

-- 
ISHIDA Akio <iakio @ mono-space.net / ishida @ cycleof5th.com>



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