Hello!
Bon, je pose le décor d’abord : boite moyenne qui fait un assez gros soft d’hotellerie en PHP sur IE6 avec une BD Oracle.
Problème : on commence à faire sérieusement tous les processus en PL/SQL ( parce que miam et c’est rapide ), et on a vraiment du mal à recuperer les données generée par Oracle depuis PHP.
Je m’explique : on ne sait pas, par exemple, comment chopper un array que pourrait retourner une fonction PL/SQL. On a bien trouvé un moyen de chopper des valeures de retour en utilisant des REF_CURSOR qu’on déclare comme IN/OUT dans le procedure PL/SQL, en l’appellant avec la fonction PHP OCINewCursor qui permet de créer un curseur, et faire que le procédure le remplisse et rechopper le curseur plein après coup. Je suis pas ultra-claire sur ce coup peut-être. Ça donne un truc du genre :
[code]$CURSOR_GARANTIAS = OCINewCursor( $BD );
$SQL = "BEGIN ";
$SQL.= « P_GENERA_ARRAY_GARANTIAS ( :DATA, :AGENCIA, TO_DATE( :FECHA_INI, ‹ DD-MM-YYYY › ), TO_DATE( :FECHA_FIN, ‹ DD-MM-YYYY › ), :GRABAR, :SERIE, :USUARIO, :DECIMALES, :DIVISA, :EMP ); »;
$SQL.= « END; »;
$PARAMETROS[":AGENCIA"] = $AGENCIA;
$PARAMETROS[":FECHA_INI"] = $FECHA_DESDE;
$PARAMETROS[":FECHA_FIN"] = $FECHA_HASTA;
$PARAMETROS[":GRABAR"] = $GRABAR;
$PARAMETROS[":SERIE"] = $SERIE;
$PARAMETROS[":USUARIO"] = $USUARIO;
$PARAMETROS[":DECIMALES"] = $DECIMALES;
$PARAMETROS[":DIVISA"] = $DIVISA;
$PARAMETROS[":EMP"] = $EMPRESA;
$STMT = OCIParse( $BD, $SQL );
foreach( $PARAMETROS as $I => $J )
{ OCIBindByName( $STMT, « $I », &$PARAMETROS[$I], -1 ); }
OCIBindByName( $STMT, « DATA », &$CURSOR_GARANTIAS, -1,OCI_B_CURSOR );
OCIExecute( $STMT );
OCIExecute( $CURSOR_GARANTIAS );
$I = 0;
while ( OCIFetchInto( $CURSOR_GARANTIAS, &$DATA ))
{
$ARRAY[$I] = $DATA;
$I++;
}
OCIFreeCursor( $STMT );
OCIFreeStatement( $STMT );
return $ARRAY[/code]
Et là :DATA est le REF_CURSOR que le procedure va remplir.
Bon … ça marche très bien quand on sait exactement ce que le procédure va génerer, mais quand c’est un truc dynamique, genre d’une date à une autre, on ne sait pas trop comment faire pour passer les valeurs de l’array au cursor.
Donc … euh … si qqun a déjà bossé avec PHP + Oracle …
Merci
P.S : oui je programme en espagnol, HA!