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 || ...);