Oracle
 sql >> Database >  >> RDS >> Oracle

PLS-00402:alias richiesto nell'elenco SELECT del cursore per evitare nomi di colonna duplicati

Il tuo problema è che la tua query sta selezionando alcuni valori di stringa letterali senza impostare alcun alias:

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

Nel caso precedente, Oracle genererà automaticamente brutti alias che assomigliano a questo:

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

Quindi, come puoi vedere, ora hai 3 nomi di colonne molto brutti con cui è molto difficile lavorare e 2 di essi sono duplicati, causando l'errore che stai ricevendo.

Considera di dare loro degli pseudonimi distinti per evitare l'ambiguità. Questo è solo un esempio, ma dovresti fornire un alias più significativo in base al significato del valore:

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

La cosa divertente è che tu non attualmente utilizzando quei 3 valori durante la lettura della query nel cursore for loop. Durante la lettura/lo scorrimento del cursore, invece di provare a leggere i 3 valori dal cursore, è sufficiente codificare nuovamente i valori mentre li stampi.

Quindi, in effetti, se davvero non ti interessa leggere i 3 valori dal cursore, rimuovili del tutto dalla query. Altrimenti, sostituisci i tuoi valori hardcoded dal tuo DBMS_OUTPUT.PUT_LINE(...) con gli alias che hai impostato.

Quindi, una volta che la tua query è stata corretta, invece di:

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

Probabilmente dovresti usare il cursore in questo modo:

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