2009-10-08 15 views
0

J'ai une fonction PostgreSQL qui sélectionne les données et retourne via un refcursor, semblable à la déclaration suivante:CodeIgniter et PostgreSQL - Récupération des données de fonction retour refcursor

CREATE OR REPLACE FUNCTION my_function() 
    RETURNS refcursor AS 
    ... 

Comment puis-je récupérer les données de cette fonction via un modèle CodeIgniter? Je ne peux pas simplement sélectionner directement à partir de la fonction car elle ne renvoie pas les données directement.

Répondre

5

Dans le cas où quelqu'un est intéressé, un post sur php.net a donné la solution suivante:

protected function dbquery($query){ 
    pg_query("BEGIN;"); 
    $tr=pg_query($query); 
    $r=pg_fetch_row($tr); 
    $name=$r[0]; 
    $rs=pg_query("FETCH ALL IN \"" . $name . "\";"); 
    pg_query("END;"); 
    return $rs; 
} 

qui peut être câblé dans le modèle comme suit:

$query = $this->dbquery("SELECT * FROM my_function()"); 

while ($row = pg_fetch_assoc($query)) 
{ 
    array_push($result, array('my_column' => $row['my_column'])); 
} 

pas une solution idéale, car elle n'utilise pas les fonctions du pilote CI Postgres (bien que cela puisse probablement être refactorisé), mais cela fonctionne.

0

La réponse ci-dessus ne tire pas parti de la classe d'enregistrement actif CI. Pour ce faire, il suffit d'exécuter une requête personnalisée dans CI.

Par exemple:

$sql = "CREATE OR REPLACE FUNCTION... " 
$this->db->query($sql); 
+0

D'accord, mais je ne cherche pas à 'create' la fonction. La fonction renvoie un curseur et je devais appeler cette fonction et lire les données qu'elle renvoie. Si vous pouvez poster un exemple de faire * ça * en utilisant la classe d'enregistrement actif de CI, je vous en serais reconnaissant. –