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
Partager