Page 1 sur 1

Récupérer résultat d'une procédure Oracle

Posté : 19 avr. 2007, 14:59
par zeus
Bonjour à tous,

Pour un développement, j'ai dû créer une procédure dans un package Oracle qui me récupère un nombre de site pour chaque période compris entre 2 dates.
Cette procédure me donne un résultat par période, je doit donc retourner une liste de résultat.

Pour cela, j'ai donc créer un type utilisateur dans ce pack et ma procédure me retourne un objet de ce type.

Or, en PHP, je n'arrive pas à récupérer ce retour :?

Voici le code qui permet de spécifier mon package :

Code : Tout sélectionner

CREATE OR REPLACE PACKAGE "PACK_RAPPORT" IS -- ******************************************* -- *** DEFINITION DES TYPES UTILISATEURS *** -- ******************************************* -- Chaque ligne de résultat contient la date de début de la période, la date de fin de la période et le nombre de site -- >> actif pendant cette période TYPE type_record IS RECORD( debut_periode DATE, fin_periode DATE, nb_site NUMBER); -- Table contenant les résultats de l'analyse du nombre de site par période TYPE type_table IS TABLE OF type_record INDEX BY BINARY_INTEGER; -- *************************************************************************************************************** -- *** Retourne le nombre de site actif pour chaque période définie par l'intervalle pc_intervalle entre la *** -- *** date de début pd_date_debut et la date de fin pd_date_fin *** -- *************************************************************************************************************** FUNCTION get_site_actif( pd_date_debut DATE, pd_date_fin DATE, pc_intervalle VARCHAR) RETURN type_table; END PACK_RAPPORT; /
Et voici le code que j'utilise pour récupérer le retour de cette procédure en PHP :
$str_requete = "BEGIN :result := pack_rapport.get_site_actif(to_date('01-01-2006', 'DD-MM-YYYY'), to_date('01-12-2006', 'DD-MM-YYYY'), 'MM'); END;";
		
$cur = oci_parse($centrale, $str_requete);
$result = oci_new_collection($centrale, 'TYPE_TABLE');
oci_bind_by_name($cur, "result", $result); //Permet de recuperer le statut de l'exeution.
oci_execute($cur); 
Mais j'obtiens l'erreur suivante :

Code : Tout sélectionner

Warning: oci_new_collection() [function.oci-new-collection]: OCITypeByName: OCI-22303: Type ""."TYPE_TABLE" introuvable in ...

Posté : 19 avr. 2007, 15:14
par Ryle
Je pense que ton type n'est valide qu'à l'intérieur de ta proc.. du coup quand tu l'appelles avec php en lui spécifiant le type "TYPE_TABLE" il te jette en disant qu'il ne le connait pas...

Essaye peut être de déclarer ton type en dehors de la procédure avec un CREATE TYPE ?

Posté : 19 avr. 2007, 15:18
par zeus
Effectivement, j'ai également pensé à ça ... Or je ne peut pas créer de nouveau type ou collection en dehors de ma procédure ... :(

J'ai également essayé de mettre 'PACK_RAPPORT.TYPE_TABLE' au lieu de 'TYPE_TABLE' mais exactement la même erreur :cry: