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