微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

您可以使用PDO和PostgreSQL返回多个结果集吗?

我想将多个查询分组为一个驻留在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] 举报,一经查实,本站将立刻删除。

相关推荐