[Oracle 9] Problème SQL dynamique
Bonjour,
pour récupérer un curseur en paramètre de sortie dans ma procédure stockée j'ai créé un code dynamique.
Ma première version était la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
CREATE OR REPLACE PROCEDURE PS_GET_DETAILS_LOCALISATION
(NOM_TABLE IN VARCHAR2,
ID_TABLE IN VARCHAR2,
io_cursor IN OUT LP_LOCALISATION.C_ST_LOCALISATION )
AS
BEGIN
OPEN io_cursor FOR
SELECT ID, CODE, DESI FROM aii.VW_LOCALISATION_UP
WHERE ID = TO_NUMBER(ID_TABLE);
END;
/
Show errors |
Avec le test suivant pas de problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
SET SERVEROUTPUT ON;
DECLARE
CUR LP_LOCALISATION.C_ST_LOCALISATION;
rec VW_LOCALISATION_UP%ROWTYPE ;
BEGIN
PS_GET_DETAILS_LOCALISATION('UP','174',CUR);
LOOP
FETCH CUR INTO rec ;
EXIT
WHEN CUR%NOTFOUND ;
dbms_output.put_line( rec.ID || ' ' ||rec.CODE ) ;
END LOOP ;
CLOSE CUR ;
END; |
Maintenant si je créé mon curseur dynamiquement
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
CREATE OR REPLACE PROCEDURE PS_GET_DETAILS_LOCALISATION
(NOM_TABLE IN VARCHAR2,
ID_TABLE IN VARCHAR2,
io_cursor IN OUT LP_LOCALISATION.C_ST_LOCALISATION )
AS
vlStr VARCHAR2(500) ;
BEGIN
vlStr := ' OPEN io_cursor FOR ' ;
vlStr := vlStr || ' SELECT ID, CODE, DESI ' ;
vlStr := vlStr || ' FROM aii.VW_LOCALISATION_' || NOM_TABLE ;
vlStr := vlStr || ' WHERE ID = TO_NUMBER(' || ID_TABLE || ')' ;
DBMS_UTILITY.EXEC_DDL_STATEMENT(vlStr);
END;
/
Show errors |
La procédure compile mais mon test ne passe plus et ressort avec l'erreur
Code:
1 2 3 4 5 6 7 8 9 10
|
DECLARE
*
ERREUR à la ligne 1 :
ORA-00900: Instruction SQL non valide
ORA-06512: à "SYS.DBMS_SYS_SQL", ligne 826
ORA-06512: à "SYS.DBMS_SQL", ligne 32
ORA-06512: à "SYS.DBMS_UTILITY", ligne 550
ORA-06512: à "AII.PS_GET_DETAILS_LOCALISATION", ligne 15
ORA-06512: à ligne 5 |
Merci par avance de votre aide.