Je voudrais regrouper plusieurs requêtes dans une seule fonction qui réside dans PostgreSQL. La fonction sera interrogée à l'aide de PDO.Pouvez-vous retourner plusieurs ensembles de résultats en utilisant PDO et PostgreSQL?
La fonction est:
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;
Voici le code PHP. "Database" en tant que classe singleton qui configure les propriétés de connexion habituelles, rien de spécial.
$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();
Et le résultat.
PDOException: SQLSTATE[IM001]: Driver does not support this function: driver does not support multiple rowsets in xxxx.php on line 32
Ceci semblerait indiquer que ce n'est pas supporté, mais encore une fois, je ne trouve pas de liste définissant exactement ce qui est.
Est-ce que quelqu'un a réussi à obtenir ce fonctionnement?
Références:
- 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
C'est pour un processus de planification plutôt compliqué, renvoyant plusieurs tables parent et enfant en conséquence. Plusieurs requêtes partagent des paramètres et ce serait plus rapide sur la base de données, plus je voudrais les regrouper pour faciliter la maintenance et réduire les allers-retours. Et bien.. –