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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    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 confirmé

    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
    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

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

    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
    Billets dans le blog
    4
    Par défaut
    Voila avec la recherche de SPOOL.
    http://www.developpez.net/forums/sho...ighlight=spool

  4. #4
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    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 averti
    Inscrit en
    Mai 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 31
    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 confirmé

    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
    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.)

+ 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