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 :
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 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
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 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;
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
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
Merci par avance de votre aide.
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
Partager