Bonjour,
Je travaille actuellement sur un projet d'export de données (tuples) en PL/SQL. Mon projet est de faire une procédure PL/SQL qui accepte en paramètre un nom de table et qui exporte ses données (par exemple dans un fichier, mais ce n'est pas le problème).
Exemple de signature:
Mon problème est de gérer la généricité, soit que je puisse lui passer n'importe quelle nom de table en paramètre, la procédure sera capable d'aller me rechercher les données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part PROCEDURE exportData(tableName IN varchar2, schemaName IN varchar2);
Même si j'ai pu partiellement avancer en utilisant un pointeur de curseur (REF CURSOR), je n'ai malheureusement pas encore trouvé de moyen de récupérer un type de table de manière dynamique.
Auriez-vous une astuce pour ce faire ?
Merci d'avance pour vos propositions
P.-S: voici un exemple de code que j'ai déjà réalisé
Naturellement, le problème survient en ligne 18 lors du FETCH...
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
24
25
26
27 DECLARE sql_request varchar2(255); my_gen_table varchar2(100); data_to_return clob; returned_line OBJECT; TYPE t_cursor_result IS REF CURSOR; data_cursor t_cursor_result; BEGIN my_gen_table := 'EMP'; DBMS_LOB.CREATETEMPORARY(data_to_return, true); DBMS_LOB.OPEN(data_to_return, DBMS_LOB.lob_readwrite); sql_request := 'SELECT * FROM '||my_gen_table; OPEN data_cursor FOR sql_request; LOOP FETCH data_cursor INTO returned_line; DBMS_LOB.WRITEAPPEND(data_to_return, LENGTH(), carrier_return); EXIT WHEN returned_line%NotFound; END LOOP; CLOSE data_cursor; DBMS_OUTPUT.PUT_LINE(data_to_return); DBMS_LOB.CLOSE(data_to_return); DBMS_LOB.FREETEMPORARY(data_to_return); END;
La variable "returned_line" affichée ici est celle qui contiendra chaque ligne retournée par la base de donnée et, par conséquent, celle qui m'intéresse le plus et celle que je suis actuellement incapable de paramétrer correctement.
Partager