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 :

Paramètres SQL+ créés dans un fichier define et utilisés dans une boucle


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 39
    Points
    39
    Par défaut Paramètres SQL+ créés dans un fichier define et utilisés dans une boucle
    J'ai un fichier define contenant plusieurs paramètres suffixés par un numéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def nom_table1='T_XXX'
    def nom_table2='T_ZZZ'
    def nom_table3=T_YYY'
    etc...
    Je voudrais utiliser ces variables dans une boucle ou le nombre en suffixe soit le compteur de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in 1..nb_table loop
      DBMS_OUTPUT.PUT_LINE('NOM_TABLE1 ' || &NOM_TABLEi );
      DBMS_OUTPUT.PUT_LINE('NOM_TABLE1 ' || &NOM_TABLE||i );
    END LOOP BOUCLETABLE;
    Mes deux essais ne fonctionnent pas comment faire ?

    Je travaille sous SQL+ dans oracle 10g
    Merci de votre aide

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Pour que SQL*Plus substitue la valeur à la variable il faut que le nom de la variable soit en "dur" et non dynamique:

    &NOM_TABLE1: OK
    &NOM_TABLEI ou &NOM_TABLE ||i : ne peut pas marcher.

  3. #3
    Nouveau membre du Club Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 39
    Points
    39
    Par défaut
    Comment puis-je alors résoudre mon problème ?
    C'est à dire faire une boucle pour traiter tous les champs définis dans le fichier paramètre ?

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par boisdin Voir le message
    Comment puis-je alors résoudre mon problème ?
    C'est à dire faire une boucle pour traiter tous les champs définis dans le fichier paramètre ?
    En stockant vos paramètres dans une table temporaire par exemple.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Nouveau membre du Club Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 39
    Points
    39
    Par défaut
    Le problème me semble le même, comment stocker ces paramètres dans une table sans faire de boucle ?

    Leur nombre n'est pas constant;
    Je peux effectivement écrire un traitement un certain nombre de fois pour traiter le paramètre nom_table1 puis le paramètre nom_table2 puis .... le paramètre nom_table150 et fatalement un jour j'aurai 151 paramètres !!

    En fait mon problème c'est que j'ai des paramètres avec des noms indicés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def nom_table1='T_XXX'
    def nom_table2='T_ZZZ'
    def nom_table3='T_YYY'
    etc...
    et que j'aimerais y accèder en me servant de cet indice.

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Ce que je suggère, dans votre fichier de paramètres, c'est de remplacer (ou compléter) vos DEFINE par des INSERT INTO dans une table préalablement créée pour stocker ces paramètres.
    Comme ça vous pourrez boucler dessus.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  7. #7
    Nouveau membre du Club Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 39
    Points
    39
    Par défaut
    Je pense que c'est ce que je vais faire, merci de vos contributions

  8. #8
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Une piste serait d'utiliser une collection PL/SQL comme cela:
    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
    23
    24
    25
     
    DECLARE
        TYPE Tt IS TABLE OF VARCHAR2(255);
        Vtt Tt := Tt(&b);
        i   NUMBER;
    BEGIN
        Dbms_Output.Put_Line(Vtt.COUNT);
        FOR i IN Vtt.FIRST .. Vtt.LAST
        LOOP
            Dbms_Output.Put_Line(Vtt(i));
        END LOOP;
    END;
    /
    SQL> Entrez la valeur de b: 
    '1','2','3','4'
     
    SQL>
     
    4
    1
    2
    3
    4
     
    PL/SQL procedure successfully completed
    Cela pourrait être adapté à tes besoins

  9. #9
    Nouveau membre du Club Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 39
    Points
    39
    Par défaut
    Oui, ça fonctionne bien également
    Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/05/2009, 10h25
  2. Réponses: 2
    Dernier message: 23/04/2009, 18h43
  3. [SQL] comment enregistrer un fichier doc ou pdf dans une BD
    Par adilassadi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/05/2007, 17h17
  4. Réponses: 10
    Dernier message: 02/04/2007, 17h22
  5. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58

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