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