[pgsql-jp: 35434] クエリー結果の行数を返す

Koyama Manabu sm-bunbun-ll @ mx9.tiki.ne.jp
2005年 5月 27日 (金) 21:24:46 JST


小山といいます。
FedoraCode1+Apache2.0+PostgreSQL7.4.5+PHP4.3.7
PEARDBとSmarty2.6.3を使用しています。

PL/PgSQLで実行させたクエリーの結果の行数を
取得したいのですが、よく分かりません。

----PL/PgSQL---------------
create or replace function nmaster_func3(text) returns setof ninusi_mastert 
as '
declare
jouken alias for $1;
sql text;
rec record;

begin
 sql:=''select * from ninusi_mastert where '' || jouken;
 for rec in execute sql loop
 return next rec;
 end loop;
return;
end;
' language plpgsql;
----------------------------

------PHP--------------------
require_once("db_connect.php");
require_once("sakusei_jouken.php");
<略>
$db=new db_conclass();
$j=new jouken_class($var1);
$where_jouken=$j->create_jouken($where_str);
print($where_jouken."<br />");
$var_sql="select * from nmaster_func3($where_jouken)";

$res=$this->db_object->getAll($var_sql,array(),DB_FETCHMODE_ASSOC); ←A
if(DB::isError($res)) {
 print $res->getDebugInfo();
 exit;
 }
$this->smarty_obj->assign("t_array",$res);
$this->smarty_obj->display("kekka_hyouji.tpl");
$this->db_object->disconnect();
 }
}
<略>
--------------------------------------------------
こういった感じでレコードを取得できてブラウザに表示できています。
Aの部分のクエリーの結果のレコード数を取得したいのですが、
PEARDBを使用した場合の方法が分かりません。
SQL Serverであれば、ストアドプロシージャで
クエリーの直後に"@@rowcount"とすれば、行数を
取得してoutputパラメータに代入すれば、クライアント側に
取得できます。

PL/PgSQLにもこういった使い方があるのかとも思い、
探してみました。「GET DIAGNOSTICS integer_var = ROW_COUNT;」
といった使い方があるみたいですが、上記表示の
PL/pgSQLで結果を受取ることが出来るのでしょうか?

またPHP側でも簡単な方法があるのでしょうか?
"pg_num_rows"という関数があるみたいなのですが、
これはPEARでは使えないのでしょうか?

よろしくお願いします。








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