問題は、クエリがエイリアスを設定せずにいくつかのリテラル文字列値を選択していることです。
select ..., 'IPU', ... , 'IPU', ..., 'EUR', ...
上記の場合、Oracleは次のような醜いエイリアスを自動生成します。
select ..., 'IPU' AS "'IPU'", ..., 'IPU' AS "'IPU'", ..., 'EUR' AS "'EUR'", ...
ご覧のとおり、3つの非常に醜い列名があり、操作が非常に面倒で、そのうち2つが重複しているため、エラーが発生します。
あいまいさを避けるために、適切な個別のエイリアスを与えることを検討してください。これは単なる例ですが、値の意味に応じて、より意味のあるエイリアスを指定する必要があります。
select ..., 'IPU' AS some_col_1, ..., 'IPU' AS some_col_2, ..., 'EUR' AS some_col_3, ...
面白いのは、あなたがではないということです 現在、カーソルforループでクエリを読み取るときにこれらの3つの値を使用しています。カーソルを読み取ったりループしたりするときは、カーソルから3つの値を読み取ろうとする代わりに、出力するときに値を再度ハードコーディングするだけです。
したがって、実際には、カーソルから3つの値を読み取ることに本当に関心がない場合は、クエリからそれらを完全に削除してください。それ以外の場合は、ハードコードされた値をDBMS_OUTPUT.PUT_LINE(...)
から置き換えます。 設定したエイリアスを使用します。
したがって、クエリが修正されると、次の代わりに:
DBMS_OUTPUT.PUT_LINE(... || 'IPU' || ... || 'IPU' || ... || 'EUR' || ...);
おそらく次のようにカーソルを使用する必要があります:
DBMS_OUTPUT.PUT_LINE(... || De_Dub_rec.some_col_1 || ... || De_Dub_rec.some_col_2 || ... || De_Dub_rec.some_col_3 || ...);