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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.