Salut !
Je me retrouve confronté à un problème complexe :
Dans une procédure stockée dans un package, je fais une boucle FOR ... LOOP sur un curseur implicite.
Hors dans cette procédure je ne connais pas à l'avance ni le nom de la table, ni celui des champs de cette table. Ils sont tous passé en paramètres en entrée de la procédure.
Le problème est qu'au moment où je souhaite utiliser ma variable curseur pour lire des valeurs de tel ou tel champ de ma table, le nom du champ se trouve dans une variable VARCHAR2.
Hors celà provoque une erreur à la compilation de mon package, qui me signale que j'utilise un identificateur non valide à la suite de ma variable curseur.
Pour faciliter la compréhension voici un petit schéma en pseudo code :
PROCEDURE ma_proc (ma_Table IN VARCHAR2, mon_Champ IN VARCHAR2) IS
DECLARE
section déclarative
BEGIN
ici je crée une vue ma_Vue a partir de ma_Table;
For c_rec IN (select * from ma_Vue) LOOP
Select count(*) from ma_Table where c_rec.mon_Champ = ... ;
END LOOP;
END;
J'ai essayé de mettre le nom de mon champ directement avec le paramètre IN (comme dans l'exemple), de le mettre dans une variable VARCHAR2, d'éxecuter mon Select en SQL dynamique natif (mais on ne peut visiblement pas utiliser les curseurs comme celà)...
Là je sèche vraiment et je serais bien aise de bénéficier de votre expérience !
Merci!
Partager