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 :

Utiliser une variable pour désigner une colonne


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut Utiliser une variable pour désigner une colonne
    Bonjour,

    J'ai un petit soucis pour accéder à des valeurs dans une requête SQL. Ce que je veux faire :
    J'ai un tableau (mytable) avec 2 colonnes de numéro de références vers d'autres tableaux et une centaine de colonne avec des numéros. Je veux parcourir le tableau et par ligne ( de mytable) je veux ajouter une ligne par colonne (à partir de la troisième colonne) dans une nouveau tableau (newtable) qui comprend la valeur du champ du premier tableau et d'autres informations sur la ligne du premier tableau.

    Donc ce que je comptais de faire c'est ceci :
    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
    ...
    v_valeur NUMBER;
    Begin 
    ...
    for mycursor in (select * from mytable where ...) LOOP
       v_valeur := mycursor.VALUE1
       insert into newtable(...,VALUELINE) 
       values (...,v_valeur)
    
       v_valeur := mycursor.VALUE2
       insert into newtable(...,VALUELINE) 
       values (...,v_valeur)
    
       ...
    
       v_valeur := mycursor.VALUE24
       insert into newtable(...,VALUELINE) 
       values (...,v_valeur)
    END LOOP
    ...
    Mon problème est que le nombre de colonne du premier tableau qui m'intéresse est variable (12, 24, 52, 104, 356). Donc ce que je comptais de faire c'est une boucle sur les colonne, en utilisant une variable varchar2 qui comporte le nom de la colonne (VALUE1, ...), genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    colname  varchar2;
    ...
    for mycursor in (select * from mytable where ...) LOOP
       for i in 1..NUMINTERESSANT LOOP
          colname := 'VALUE' || to_char(i);
          v_valeur := mycursor.colname;
          insert into newtable(...,VALUELINE) 
          values (...,v_valeur)
       END LOOP;
    END LOOP;
    ...
    Et ici ça crache. Il n'aime pas que je lui donne une variable pr le nom de la colonne, il veut le hard coder. J'ai l'erreur :
    PLS-00302: component 'colname' must be declared.

    Est-ce qu'il y a moyen d'utiliser une variable pr le nom de la colonne? Je pourra aussi changer la structure de la table mais alors d'autres personne vont pas être content.

    Merci d'avance.

  2. #2
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    SQL dynamique ...
    EXECUTE_IMMEDIATE

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut
    merci.

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

Discussions similaires

  1. Utiliser une variable pour appeler une routine ?
    Par black bulldog dans le forum Langage
    Réponses: 7
    Dernier message: 14/09/2014, 04h30
  2. Réponses: 1
    Dernier message: 20/06/2012, 14h07
  3. utiliser une variable pour insérer une ligne
    Par goupil9 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2012, 20h18
  4. Réponses: 6
    Dernier message: 20/11/2009, 13h07
  5. Réponses: 6
    Dernier message: 29/11/2007, 16h15

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