IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Curseur avec requete dynamique (php + procédures stockées oracle PL/SQL)


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Curseur avec requete dynamique (php + procédures stockées oracle PL/SQL)
    Curseur avec requete dynamique (php + procédures stockées oracle PL/SQL)

    Mon but : appeler, via PHP, une procédure stockée oracle qui renvoie un flot de données (OCINewCursor, OCIParse, OCIBindByName, OCIExecute, boucle avec un OCIFetchInto) et une composition dynamique de la requête à exécuter


    La procédure suivante fonctionne (du visiblement très brillant SheikYerbouti) :

    DECLARE
    TYPE T_EMP_ID is TABLE of EMP.empno%TYPE;
    TYPE T_EMP_NAME is TABLE of EMP.ename%TYPE;
    TYPE EmpCurTyp is REF CURSOR;
    Emp_cv EmpCurTyp ;
    T_Id T_EMP_ID ;
    T_Nom T_EMP_NAME ;
    LC$Requete VARCHAR2(256);
    BEGIN
    LC$Requete:= ‘SELECT emp_no, ename from EMP’ ;

    OPEN Emp_cv for LC$Requete ;

    FETCH Emp_cv BULK COLLECT INTO T_id, T_Nom ;

    CLOSE Emp_cv ;

    END;

    Pourquoi ce qui suit ne fonctionne pas ?

    CREATE OR REPLACE package ADMIN_MARCHE_PUB
    as
    TYPE liste_doc_joint_RecTyp IS RECORD (
    no_doc DOC_JOINT.no_doc%type,
    chem_doc DOC_JOINT.chem_doc%type,
    nom_doc DOC_JOINT.nom_doc%type,
    chem_rac_doc DOC_JOINT.chem_rac_doc%type
    );
    TYPE liste_doc_joint_CurTyp IS REF CURSOR RETURN liste_doc_joint_RecTyp ;

    procedure select_doc_joint_type
    (
    numero_objet_in IN number,
    nom_objet_in IN varchar,
    mon_curseur IN OUT liste_doc_joint_CurTyp )
    ;
    end ADMIN_MARCHE_PUB;

    CREATE OR REPLACE package body ADMIN_MARCHE_PUB
    as
    procedure select_doc_joint_type
    (
    numero_objet_in IN number,
    nom_objet_in IN varchar,
    mon_curseur IN OUT liste_doc_joint_CurTyp )

    is
    l_req VARCHAR2(1500);

    begin
    l_req := 'select DOC_JOINT.no_doc, DOC_JOINT.chem_doc, DOC_JOINT.nom_doc, DOC_JOINT.chem_rac_doc
    from DOC_JOINT where ' || nom_objet_in || ' = ' || numero_objet_in;

    OPEN mon_curseur for l_req;

    end select_doc_joint_type;
    end ADMIN_MARCHE_PUB;


    PL/SQL: Statement ignored
    PLS-00455: cursor 'MON_CURSEUR' cannot be used in dynamic SQL OPEN statement


    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Je ne suis pas sur que le REF_CURSOR puisse être dynamique.
    La requête du REF_CURSOR est pré compilée avant l'exécution.
    Pour verifier, on met la requete en dur.

    Cdt

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Le Error Messages dit
    PLS-00455: cursor "string" cannot be used in dynamic SQL OPEN statement
    Cause: dynamicly OPEN a REF CURSOR that has RETURN type. However, only REF CURSOR without RETURN type can be OPEN"ed by an embebded dynamic OPEN statement.
    Action: define a REF CURSOR without return type, and use it in the statement.
    Voir l'exemple dans le tutoriel section 1.2.22.

Discussions similaires

  1. [Débutant] Retour d'une procédure stockée Oracle avec paramètre NULL
    Par Hobbi1 dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/12/2014, 19h07
  2. Réponses: 15
    Dernier message: 18/11/2008, 17h41
  3. Problème avec tableaux dynamiques et procédure
    Par K20 dans le forum Langage
    Réponses: 11
    Dernier message: 06/01/2006, 20h51
  4. procédure stockée + Oracle
    Par BONNEFOI Patrick dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/04/2005, 15h09
  5. procédure stockée Oracle dans delphi 6
    Par UPNE387 dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/05/2004, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo