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

PL/SQL Oracle Discussion :

Boucle pour plusieurs tables, comment faire?


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut Boucle pour plusieurs tables, comment faire?
    bonjour,
    J'ai un script a faire pour faire un script PL/SQL.
    Le but est de ne pas reproduire le même code mais de factoriser, c'est pourquoi je fais une boucle.
    regardez le script et ensuite j’explique ce que je veux faire.
    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
    DECLARE
    	requete VARCHAR2(5000);
    	nomTable VARCHAR2;
    BEGIN
    
    Begin
        For i in 1..3
    	Loop
    		requete := 'create or replace view nomTable as select a.*, x.id as session_id, s.rid_user_param_valid as id_utilisateur ';
    		requete := requete || 'FROM observation a, session d, session_par f, builder_session x, adversaire s ';
    		requete := requete || 'WHERE a.id =  s.rid_ADV_477 ';
    		requete := requete || 'AND s.rid_sess_param_valid = d.id ';
    		requete := requete || 'AND s.rid_sess_param_invalid = f.id ';
    		requete := requete || 'and d.date_effet <= x.date_effet ';
    		requete := requete || 'and  f.date_effet> x.date_effet ';
    		requete := requete || 'WITH READ ONLY ';
    		EXECUTE IMMEDIATE requete;
    	End loop ;
    END;
    /
    donc je veux mettre dans ma variable plusieurs nom de table(Employes,factures,commandes,devis)
    je veux a chaque boucle on passe un nom de table et executer la requete et ainsi de suite.
    Donc je sais pas comment initialiser la boucle et je ne sais pas comment mettre UN seul nom de table dans ma variable nomTable.
    Merci de votre aide.
    J'apprend PL/SQL (c'est pourquoi mon niveau bas )
    Cordialement

  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
    Voici une façon (Les 3 tables sont en dur dans la boucle)

    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
    DECLARE
    	requete VARCHAR2(5000);
    	nomTable VARCHAR2(30);
    BEGIN
      For i in 1..3
    	Loop
    		IF 	i = 1 THEN nomTable := 'Employes';
    		ELSIF i = 2 THEN nomTable := 'Factures';
    		ELSIF i = 3 THEN nomTable := 'Commande';
    		END IF;
     
    		requete := 'create or replace view '|| nomtable ||' as select a.*, x.id as session_id, s.rid_user_param_valid as id_utilisateur'
    		 || ' FROM observation a, session d, session_par f, builder_session x, adversaire s'
    		 || ' WHERE a.id =  s.rid_ADV_477'
    		 || ' AND s.rid_sess_param_valid = d.id'
    		 || ' AND s.rid_sess_param_invalid = f.id'
    		 || ' and d.date_effet <= x.date_effet'
    		 || ' and  f.date_effet> x.date_effet'
    		 || ' WITH READ ONLY';
    		EXECUTE IMMEDIATE requete;
    	End loop ;
    END;
    PS : mieux vaut éviter les réaffectations de variable et faire une seule concaténation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    requete := requete || 'AND s.rid_sess_param_valid = d.id ';
    requete := requete || 'AND s.rid_sess_param_invalid = f.id ';
    requete := requete || 'and d.date_effet <= x.date_effet ';

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut
    Merci
    C'est ça la solution

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

Discussions similaires

  1. insertion de plusieurs lignes, comment faire ?
    Par RR instinct dans le forum SQL
    Réponses: 6
    Dernier message: 23/01/2007, 09h40
  2. Plusieurs utilisateurs, comment faire ?
    Par martonpylon12 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2006, 17h09
  3. [ Design ] commentaires pour plusieurs tables
    Par Celelibi dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 31/10/2005, 18h08
  4. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13
  5. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49

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