Bonjour à tous,

Je cherche à écrire une procédure qui passerait en paramètre le nom de la table à traiter.

Je n'arrive qu'à des échecs pour l'instant, car je vois des choses en sql dynamiques, des curseurs explicites ou même implicites, mais rien qui à priori me permettrait d'utiliser le paramètre en question


- J'ai voulu m'inspirer de la discussion suivante, mais dans mon cas je ne vois pas comment faire, car il faudrait déclarer une variable qui précise le nom de la table (du type v_variable nomtable%rowtype) :
https://www.developpez.net/forums/d4...able-argument/

Impossible de passer un paramètre dans un bloc déclaratif

- A priori impossible non plus de faire une boucle for rec in (nomrequete) loop, où nomrequete serait une variable varchar2

Je ne suis pas sure qu'il existe une solution à mon problème, mais dans le doute, voici ma procédure en l'état actuel, et donc qui ne fonctionne pas.

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
20
21
22
23
CREATE OR REPLACE procedure SOCIAL.test
( table_name in varchar2) 
is
 
sqlcur varchar2(255);
TYPE mon_curseur_type is ref cursor;
mon_curseur  mon_curseur_type;
mon_buffer varchar2(4000);
 
BEGIN
sqlcur := 'select * from SOCIAL.' || table_name ;
dbms_output.put_line (sqlcur);
 
open mon_curseur for sqlcur;
 
loop
fetch mon_curseur into mon_buffer;
exit when mon_curseur%NOTFOUND;
dbms_output.put_line (mon_buffer);
end loop;
 
END;
/
A l'exécution de la requete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
execute social.test ('CCAS');
je comprends bien que la variable mon_buffer devrait être du type nomtable%rowtype, et non varchar2


En espérant que ma demande soit claire, pourriez-vous me dire si je peux contourner les embûches et trouver une solution?

Merci par avance pour l'aide que vous pourriez m'apporter

Cécile