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