我想将多个查询分组为一个驻留在Postgresql中的函数.将使用PDO查询该功能.
该函数是:
CREATE OR REPLACE FUNCTION "test_multipe_refcursor"()
RETURNS SetoF refcursor AS $BODY$
DECLARE
parentRC refcursor;
childRC refcursor;
BEGIN
open parentRC FOR
SELECT * FROM parent;
RETURN NEXT parentRC;
open childRC FOR
SELECT * FROM child;
RETURN NEXT childRC;
RETURN;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION "test_multipe_refcursor"() OWNER TO postgres;
这是PHP代码. “数据库”作为设置常规连接属性的单例类,没有什么特别的.
$database = Database::load();
$sql = "select * from test_multipe_refcursor();";
$p = $database->query($sql);
$i = 1;
do
{
$this->set('set' . $i, $p->fetchAll(PDO::FETCH_ASSOC));
$i++;
} while ($p->nextRowset());
$p->closeCursor();
结果.
PDOException: sqlSTATE[IM001]: Driver does not support this function: driver does not support multiple rowsets in xxxx.PHP on line 32
这似乎表明不支持该功能,但是再次,我找不到定义确切内容的列表.
有没有人设法使这个工作?
参考文献:
> http://www.sitepoint.com/forums/showthread.php?p=3040612#post3040612
> PostgreSQL function returning multiple result sets
> http://ca.php.net/manual/en/pdostatement.nextrowset.php
解决方法:
返回多个结果集的支持仍在PostgreSQL todo list上,并且绝对不会达到8.4.至于setof refcursors方法,您要执行的操作不起作用,因为该函数未返回多个行集-它正在返回一个refcursors行集.我不确定使用refcursors客户端是否可以工作,但是我不太可能,即使客户端-服务器协议支持它,PDO也不太可能为此使用API.
但是,为什么要在一个查询中返回多个结果集?您始终可以单独进行查询.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。