Oracle
 sql >> Base de données >  >> RDS >> Oracle

PLS-00402 :alias requis dans la liste SELECT du curseur pour éviter les noms de colonne en double

Votre problème est que votre requête sélectionne quelques valeurs de chaîne littérales sans définir d'alias :

select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...

Dans le cas ci-dessus, Oracle générera automatiquement des alias laids qui ressemblent à ceci :

select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...

Donc, comme vous pouvez le voir, vous avez maintenant 3 noms de colonne très laids avec lesquels il est très difficile de travailler, et 2 d'entre eux sont en double, ce qui entraîne l'erreur que vous obtenez.

Envisagez de leur donner des alias distincts appropriés pour éviter toute ambiguïté. Ceci n'est qu'un exemple, mais vous devriez donner un alias plus significatif selon la signification de la valeur :

select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...

Le plus drôle, c'est que vous n'êtes pas utilise actuellement ces 3 valeurs lors de la lecture de la requête dans votre curseur pour la boucle. Lorsque vous lisez/bouclez sur votre curseur, au lieu d'essayer de lire les 3 valeurs à partir du curseur, vous codez simplement à nouveau les valeurs en dur au fur et à mesure que vous les imprimez.

Donc, en fait, si vous ne vous souciez vraiment pas de lire les 3 valeurs du curseur, supprimez-les simplement de la requête. Sinon, remplacez vos valeurs codées en dur à partir de votre DBMS_OUTPUT.PUT_LINE(...) avec les alias que vous définissez.

Ainsi, une fois votre requête corrigée, au lieu de :

DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);

Vous devriez probablement utiliser le curseur comme ceci :

DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);