[pgsql-jp: 35665] RETURNの戻り値をレコードセットと一緒に受取る

Koyama Manabu sm-bunbun-ll @ mx9.tiki.ne.jp
2005年 7月 5日 (火) 20:08:59 JST


小山といいます。

PostgreSQL 7.4.5
PHP4.3.7+PEAR+Smarty
です。

PL/pgSQLでのRETURNの戻り値を取得したいのですが、
レコードセットと一緒に取得することは出来るのでしょうか?

-----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パラメータ"のように
返すことは出来ないのでしょうか?

よろしくお願いします。





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