IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

PL-SQL sur une vue


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut PL-SQL sur une vue
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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 !

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    EXECUTE IMMEDIATE.

    Pour info :
    1/ Poster dans le bon sous forum
    2/ Utiliser les balises Code (le #)
    3/ Mettre les versions de la base
    4/ Faire des recherches
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Voila avec la recherche de SPOOL.
    http://www.developpez.net/forums/sho...ighlight=spool
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Merci (désolée je suis débutante)
    Je vois pas les résultat mais vu que l'execution prends un peu de temps, ça à l'air de fonctionner.
    Par contre maintenant y a moyen d'intégrer l'écriture des résultats dans un fichier texte ?

    Merci encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare 
      CURSOR c_listetab IS SELECT table_name FROM liste_tables; 
    begin
    	 for i in  c_listetab  loop
    	 	 execute immediate 'select * from ' || i.table_name;
    	 end loop;
    end;

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Il faut que je crée un fichier pour chaque SELECT executé et que j'y stocke les résultats.
    Le fichier doit porter le nom de la table sur laquelle j'ai fait le select.

    J'ai une erreur à la création du fichier : "exception définie par l'utilisateur non traitée" .. Quelqu'un a une idée ? Merci d'avance encore...

    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;

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Un execute immediate ne fait pas d'affichage. Donc pour le spooler dans un fichier c'est pas évident.

    Donc, mieux vaut que tu te bases sur l'exemple de PlaineR du lien que je t'ai donné pour le SPOOL.
    (Un script qui crée les ordres SELECT à exécuter dans un fichier sql, puis exécute ce fichier sql dans un spool.)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    J'essaye mais je suis vraiment pas douée visiblement...

    Je suis arrivée à obtenir le fichier .sql avec la liste des requêtes.
    J'arrive également a executer toutes ces requêtes. Mais tout cela se fait d'un bloc.

    Il faut que je parvienne à les exécuter une par une et que j'écrive le résultat au fur et à mesure et dans des fichiers différents...

    Faudrait dans l'esprit faire fonctionner ça

    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
    set head off;
    set feed off;
    spool maRequete.sql;	
     
    declare
      CURSOR c_listetab IS SELECT table_name FROM liste_tables;
      Fichier UTL_FILE.FILE_TYPE ; 
    begin
    	for i in  c_listetab  loop
    	   	Fichier := UTL_FILE.FOPEN( 'C:\',i.table_name||'.txt' , 'W', 100000) ;	
    		select 'select * from ' || table_name || ';' from liste_tables where table_name = i.table_name;
    		UTL_FILE.PUT_LINE (Fichier, @maRequete, TRUE);
    		UTL_FILE.FCLOSE(Fichier);	
     
    	end loop;
    end;
     
    spool off;

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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
    set head off
    set feed off
    spool maRequete.sql
    SELECT commande
    FROM (	SELECT table_name, 1 AS num, 'Spool ' || table_name || '.lst;' AS commande
    		FROM USER_TABLES
    UNION ALL
    		SELECT table_name, 2, 'SELECT * FROM ' || table_name || ';'
    		FROM USER_TABLES
    UNION ALL
    		SELECT table_name, 3 AS num, 'Spool off;'
    		FROM USER_TABLES
    		)
    ORDER BY table_name, num
    spool off
    @maRequete
    Tu peux te baser sur la requete suivante
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    Points : 15
    Points
    15
    Par défaut [resolu]
    Super mon problème est résolu.
    Merci pour ton aide et ta patience !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete SQL sur une vue
    Par MASSAKA dans le forum Langage SQL
    Réponses: 13
    Dernier message: 07/01/2010, 16h17
  2. DATAGRID et Top sur une vue SQL
    Par Abac_Angelique dans le forum C#
    Réponses: 3
    Dernier message: 02/01/2008, 19h03
  3. SQl requette sur une vue
    Par Destiny dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2006, 09h17
  4. Temps d'execution d'un select sur une vue
    Par rosewood dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2005, 16h06
  5. delete sur une vue: rule
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 18/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo