[PL-SQL] script sur une vue

script sur une vue [PL-SQL] - SQL/NoSQL - Programmation

Marsh Posté le 03-07-2007 à 11:37:14    

Bonjour,
 
Je vous plante le décor :
j'ai une vue "liste_tables" qui contient 1 champ (=Table_name) dans lequel je stocke le nom de certaines tables de ma base.
 
Il faut que j'écrive un script me permettant de faire un :
select <un champ particulier> sur chacune des tables recensées dans ma vue.
 
Et ensuite idéalement il faudrait que j'arrive à sortir le résultat dans un fichier texte.
 
J'ai essayer de faire le select mais cela ne fonctionne pas :
 
DECLARE
v_nomtab VARCHAR2(30); -- contiendra le nom de la table, lu a partir de ma vue
CURSOR c_listetab IS SELECT table_name FROM liste_tables ORDER BY table_name;
 
BEGIN
OPEN c_listetab;
LOOP
FETCH c_listetab INTO v_nomtab;
SELECT * FROM v_nomtab;
END LOOP;
CLOSE c_listetab;
END;
 
Merci d'avance pour votre aide !

Reply

Marsh Posté le 03-07-2007 à 11:37:14   

Reply

Marsh Posté le 03-07-2007 à 12:15:55    

ca ne marchera pas comme ca, tu dois construire ton sql et l'exécuter, cherche du coté de execute immediat
 
tu devras faire un truc genre  
 

Code :
  1. monSql:= 'select * from ' || v_nomtab;
  2. execute immediate monSql;

Reply

Marsh Posté le 03-07-2007 à 13:38:05    

Merci ça fonctionne, mais j'ai maintenant un autre soucis...  
La requête SELECT qui dans le LOOP va s'executer sur toutes les tables contenues dans ma vue. Pour chacune des tables il faudrait que je stocke les résultats du SELECT dans un fichier. Le fichier en sortie doit porter le nom de la table sur laquelle j'ai fait le SELECT.
 
J'ai donc écrit ce code :
declare  
  Fichier UTL_FILE.FILE_TYPE ;
  CURSOR c_listetab IS SELECT table_name FROM liste_tables;  
begin
  for i in  c_listetab  loop
    Fichier := UTL_FILE.FOPEN( 'C:\', i.table_name||'.txt', 'W', 100000) ;
   execute immediate 'select * from ' || i.table_name;
   UTL_FILE.FCLOSE( Fichier);
  end loop;
end;
 
Mais j'ai une erreur -> exception définie par l'utilisateur non traitée
 
Alors si vous avez une idée... merci d'avance !

Reply

Marsh Posté le 03-07-2007 à 13:58:01    

fais un traitement d'exception pour la traiter plutot que la laisser remonter, et check le message.
 
charche du coté de exception sur google

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed