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