par
zeus » 19 avr. 2007, 14:59
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 ...
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]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;
/[/code]
Et voici le code que j'utilise pour récupérer le retour de cette procédure en PHP :
[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); [/php]
Mais j'obtiens l'erreur suivante :
[code]Warning: oci_new_collection() [function.oci-new-collection]: OCITypeByName: OCI-22303: Type ""."TYPE_TABLE" introuvable in ...[/code]