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 :

Ecriture d'une boucle sur plusieurs schémas


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut Ecriture d'une boucle sur plusieurs schémas
    Bonjour à tous,
    je ne sais pas comment faire pour écrire le script suivant en utilisant une boucle de traitement plutôt que de répéter les requêtes SQL.

    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
     
    insert into schema_2013.maTable_1 (champ_1,champ_2)
    select distinct 2013, monChamp from schema_2013.maTable_2
    where condition;
    insert into schema_2013.maTable_1 (champ_1,champ_2)
    select distinct 2012, monChamp from schema_2012.maTable_2
    where condition;
    insert into schema_2013.maTable_1 (champ_1,champ_2)
    select distinct 2011, monChamp from schema_2011.maTable_2
    where condition;
    insert into schema_2013.maTable_1 (champ_1,champ_2)
    select distinct 2010, monChamp from schema_2010.maTable_2
    where condition;
    insert into schema_2013.maTable_1 (champ_1,champ_2)
    select distinct 2009, monChamp from schema_2009.maTable_2
    where condition;
    ...
    J'ai pensé à quelque chose du style mais je ne sais pas comment spécifier le nom du schéma dans la boucle, sachant que "schema_20xx" correspond au nom du schéma annuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BEGIN
     FOR i IN 1..5 LOOP
      INSERT INTO schema_2013.maTable_1 (champ_1,champ_2)
      SELECT DISTINCT 20xx, monChamp FROM schema_20xx.maTable_2
      WHERE condition;
     END LOOP;
    END;
    /

    Enfin, quelles seraient les adaptations à écrire pour utiliser le code de la boucle dans du SQLPLUS plutôt que dans SQL Developer ? L'idée étant d'appeler la requête via un fichier .bat qui ouvre SQL PLUS...

    Merci à tous,
    MarieO

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Il faut passer par du SQL dynamique en utilisant la commande EXECUTE IMMEDIATE sur une requête construite dans la procédure.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut
    Merci pour cette information.
    Toutefois, comment écrire cette fameuse requête ? Et dans quelle procédure ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En construisant en chaîne de caractères les requêtes que vous voulez passer :
    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
    DECLARE
        v$_sql   varchar2(500);
        v$_annee varchar2(  4);
        v$_crlf  varchar2(  4);
    BEGIN
        dbms_output.enable;
        v$_crlf := chr(13) || chr(10);
        FOR i IN 1..5
        LOOP
            v$_annee := to_char(2014 - i, 'fm0000');
            v$_sql := 'INSERT INTO schema_' || v$_annee || '.maTable_1 (champ_1, champ_2)' || v$_crlf
                   || 'SELECT DISTINCT '    || v$_annee || ', monChamp' || v$_crlf
                   || '  FROM schema_'      || v$_annee || '.maTable_2' || v$_crlf
                   || ' WHERE condition';
            dbms_output.put_line(v$_sql);
            -- execute immediate v$_sql;
        END LOOP;
    END;
    /
    J'ai mis en commentaire l'exécution de la chaîne construire afin que vous contrôliez au préalable son contenu.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 115
    Points : 59
    Points
    59
    Par défaut
    merci beaucoup.

    Tout fonctionne correctement

    Bonne fin de journée.
    MarieO

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

Discussions similaires

  1. Accès à une même table sur plusieurs schémas
    Par P3dr075 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 04/05/2015, 12h26
  2. [XL-2010] Faire une boucle sur plusieurs fichiers excel
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/03/2015, 12h52
  3. Faire une boucle sur plusieurs éléments
    Par retwas dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/04/2011, 17h30
  4. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  5. [phpBB][2] Faire une boucle sur plusieurs colonnes
    Par Vinuto dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 28/09/2007, 10h45

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