Ihr Problem ist, dass Ihre Abfrage einige wörtliche Zeichenfolgenwerte auswählt, ohne Aliase festzulegen:
select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...
Im obigen Fall generiert Oracle automatisch hässliche Aliase, die etwa so aussehen:
select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...
Wie Sie sehen können, haben Sie jetzt 3 sehr hässliche Spaltennamen, mit denen Sie sehr umständlich arbeiten können, und 2 davon sind doppelt vorhanden, was zu dem Fehler führt, den Sie erhalten.
Erwägen Sie, ihnen eindeutige Aliase zu geben, um Mehrdeutigkeiten zu vermeiden. Dies ist nur ein Beispiel, aber Sie sollten je nach Bedeutung des Werts einen aussagekräftigeren Alias angeben:
select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...
Das Lustige ist, dass Sie nicht sind verwendet derzeit diese 3 Werte beim Lesen der Abfrage in Ihrer Cursor-for-Schleife. Wenn Sie Ihren Cursor lesen/schleifen, anstatt zu versuchen, die 3 Werte vom Cursor zu lesen, codieren Sie die Werte einfach erneut fest, während Sie sie ausdrucken.
Wenn es Ihnen also wirklich egal ist, die 3 Werte aus dem Cursor zu lesen, entfernen Sie sie einfach vollständig aus der Abfrage. Andernfalls ersetzen Sie Ihre hartcodierten Werte aus Ihrem DBMS_OUTPUT.PUT_LINE(...)
mit den von Ihnen festgelegten Aliasnamen.
Sobald Ihre Abfrage also behoben ist, statt:
DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);
Sie sollten den Cursor wahrscheinlich so verwenden:
DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);