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