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.