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