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

Som*_*uck 5 php postgresql pdo

我想将多个查询分组到 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;
Run Code Online (Sandbox Code Playgroud)

这是 PHP 代码。“Database”作为一个单例类,设置通常的连接属性,没有什么特别的。

  $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();
Run Code Online (Sandbox Code Playgroud)

以及结果。

 PDOException: SQLSTATE[IM001]: Driver does not support this function: driver does not support multiple rowsets in xxxx.php on line 32
Run Code Online (Sandbox Code Playgroud)

这似乎表明它不受支持,但话又说回来,我找不到准确定义什么的列表。

有人设法让这个工作吗?

参考:

Ant*_*sma 4

对返回多个结果集的支持仍然在PostgreSQL 待办事项列表中,并且肯定不会达到 8.4。至于 setof refcursors 方法,您尝试执行的操作不起作用,因为该函数没有返回多个行集 - 它返回一个引用游标行集。我不确定使用 refcursors 客户端是否有效,但我认为不太可能,即使客户端-服务器协议支持它,PDO 也不太可能有相应的 API。

但是为什么要尝试在一个查询中返回多个结果集呢?您始终可以单独进行查询。