Dit problem er, at din forespørgsel vælger nogle få bogstavelige strengværdier uden at angive nogen aliaser:
select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...
I ovenstående tilfælde vil Oracle automatisk generere grimme aliaser, der ser sådan ud:
select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...
Så som du kan se, har du nu 3 meget grimme kolonnenavne, som er meget besværlige at arbejde med, og 2 af dem er dublerede, hvilket resulterer i den fejl, du får.
Overvej at give dem de rigtige adskilte aliaser for at undgå tvetydigheden. Dette er kun et eksempel, men du bør give et mere meningsfuldt alias i henhold til betydningen af værdien:
select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...
Det sjove er, at du ikke er bruger i øjeblikket disse 3 værdier, når du læser forespørgslen i din cursor for loop. Når du læser/løkker gennem din markør, i stedet for at prøve at læse de 3 værdier fra markøren, skal du blot hardkode værdierne igen, mens du udskriver dem.
Så faktisk, hvis du virkelig er ligeglad med at læse de 3 værdier fra markøren, skal du bare fjerne dem fra forespørgslen helt. Ellers skal du erstatte dine hårdkodede værdier fra din DBMS_OUTPUT.PUT_LINE(...)
med de aliaser, du har angivet.
Så når din forespørgsel er rettet, i stedet for:
DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);
Du skal nok bruge markøren sådan her:
DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);