Su problema es que su consulta está seleccionando algunos valores de cadena literal sin establecer ningún alias:
select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...
En el caso anterior, Oracle generará automáticamente alias feos que se verán así:
select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...
Entonces, como puede ver, ahora tiene 3 nombres de columna muy feos con los que es muy difícil trabajar, y 2 de ellos están duplicados, lo que genera el error que está recibiendo.
Considere darles alias distintivos adecuados para evitar la ambigüedad. Este es solo un ejemplo, pero debe proporcionar un alias más significativo de acuerdo con el significado del valor:
select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...
Lo gracioso es que tú no actualmente usa esos 3 valores al leer la consulta en su cursor for loop. Al leer/recorrer el cursor, en lugar de intentar leer los 3 valores del cursor, simplemente vuelve a codificar los valores mientras los imprime.
Entonces, de hecho, si realmente no le importa leer los 3 valores del cursor, simplemente elimínelos de la consulta por completo. De lo contrario, reemplace sus valores codificados de su DBMS_OUTPUT.PUT_LINE(...)
con los alias que establezcas.
Entonces, una vez que se solucione su consulta, en lugar de:
DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);
Probablemente deberías usar el cursor así:
DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);