|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2007 Messages : 3 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : février 2006 Messages : 139 ![]() |
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 |
|
|
00
|
|
|
#3 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Le Error Messages dit
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com