Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

PLS-00402:alias necessário na lista SELECT do cursor para evitar nomes de coluna duplicados


Seu problema é que sua consulta está selecionando alguns valores de string literais sem definir nenhum alias:
select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...

No caso acima, o Oracle gerará automaticamente aliases feios que se parecem com isso:
select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...

Então, como você pode ver, agora você tem 3 nomes de coluna muito feios que são muito difíceis de trabalhar, e 2 deles são duplicados, resultando no erro que você está recebendo.

Considere dar a eles aliases distintos apropriados para evitar a ambiguidade. Este é apenas um exemplo, mas você deve fornecer um alias mais significativo de acordo com o significado do valor:
select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...

O engraçado é que você não atualmente usando esses 3 valores ao ler a consulta em seu cursor para loop. Ao ler/percorrer o cursor, em vez de tentar ler os 3 valores do cursor, você simplesmente codifica os valores novamente enquanto os imprime.

Então, na verdade, se você realmente não se importa em ler os 3 valores do cursor, basta removê-los da consulta. Caso contrário, substitua seus valores codificados de seu DBMS_OUTPUT.PUT_LINE(...) com os aliases que você definiu.

Então, quando sua consulta for corrigida, em vez de:
DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);

Você provavelmente deve usar o cursor assim:
DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);