我想将多个查询分组到一个生活在PostgreSQL中的函数中。该函数将使用PDO进行查询。您可以使用PDO和PostgreSQL返回多个结果集吗?
功能是:
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
这是一个相当复杂的调度过程,因此返回多个父表和子表。有几个查询共享参数,它会在数据库上更快,另外我想将它分组以便于维护并减少往返。呃,好吧.. – 2009-06-06 13:53:29