आपकी समस्या यह है कि आपकी क्वेरी कोई उपनाम सेट किए बिना कुछ शाब्दिक स्ट्रिंग मानों का चयन कर रही है:
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, ...
मजे की बात यह है कि आप नहीं हैं लूप के लिए अपने कर्सर में क्वेरी पढ़ते समय वर्तमान में उन 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 || ...);