[pgsql-jp: 35666] Re: RETURNの戻り値をレコードセットと一緒に受取る
abe_i
abe_i @ yamagishi.or.jp
2005年 7月 5日 (火) 23:36:22 JST
阿部といいます。
やりたいことを誤解しているかも知れないので、間違っていると思われる点を
2点を挙げさせてもらいます。
1.setof を使用した場合、最後のreturnは引数なしのreturnを使うのでは?
2.$resはobjectですから、countしても意味はないので、行数を知りたいので
あればnumRows()を使えばいいですし、知りたい行数がこの関数が返す行数
と違うのであれば、その行数を最後のデータの一部として返すとかの細工が
必要だと思います。
ではでは。
>
> -----PL/pgSQL側-----------------------------
> create or replace function nmaster_func3(text,integer) returns setof
> ninusi_mastert as '
> <略>
>
> begin
> --シーケンスの設定
> create temp sequence mas_seq start 1;
> --一時テーブル作成
> create temp table pro_t(
> row_id integer default nextval(''mas_seq''),
> proid integer
> );
>
> sql:=''insert into pro_t(proid)
> select ninusi_code from ninusi_mastert where '' || jouken;
> execute sql;
>
> --結果セットの取得
> GET DIAGNOSTICS int_var=ROW_COUNT; ←"ここでの行数を戻り値として取得したい。"
>
>
> --最初と最後の作成
> intfirst:=((curentpage-1) * 20) +1;
> intlast:=curentpage * 20;
>
> sql2:=''select * from ninusi_mastert where ninusi_code in(select proid from
> pro_t where
> row_id between '' || intfirst || '' and '' || intlast || '')'';
>
> for rec in execute sql2 loop
> return next rec;
> end loop;
> return int_var;
> end;
> ' language plpgsql;
> -------------------------------------
> --------PHP側-----------------------
> レコードを
> <略>
> $val_sql="select * from nmaster_func3($where_jouken,$var3)";
> $res=$this->db_object->getAll($var_sql,array(),DB_FETCHMODE_ASSOC);
> <略>
> -------------------------------------
> "getAll"でレコードは取得でき、表示されています。
> $row=count($res);
> とすると$rowは、必ず"20"となります。(プログラムがそうなっている。)
> SQL Serverのように変数"int_var"を"OUTPUTパラメータ"のように
> 返すことは出来ないのでしょうか?
>
> よろしくお願いします。
--
阿部 <abe_i @ yamagishi.or.jp>
pgsql-jp メーリングリストの案内