आपके पास एक नाम विरोध है। आपने अपने स्थानीय चरों को अपने कॉलम नामों के समान ही कहा है, और कॉलम नामों को प्राथमिकता दी जा रही है, जैसा कि दस्तावेज़ीकरण में बताया गया है:
<ब्लॉकक्वॉट>यदि SQL कथन किसी ऐसे नाम का संदर्भ देता है जो स्तंभ और स्थानीय चर या औपचारिक पैरामीटर दोनों से संबंधित है, तो स्तंभ नाम को प्राथमिकता दी जाती है।
सावधानी:
जब एक चर या पैरामीटर नाम की व्याख्या स्तंभ नाम के रूप में की जाती है, तो डेटा को अनजाने में हटाया, बदला या सम्मिलित किया जा सकता है।
पहले चार चेक हमेशा सत्य होने जा रहे हैं (जब तक कि आपके पास शून्य मान न हों), इसलिए आपको प्रत्येक पंक्ति मिल जाएगी जिसमें done = 'N'
है ।
अपने स्थानीय चर नामों को किसी और चीज़ में बदलें; स्थानीय चर, पैरामीटर और कॉलम के बीच अंतर करने के लिए उपसर्ग का उपयोग करना काफी सामान्य है, कुछ इस तरह:
Cursor linija IS
SELECT *
FROM table_x X
where x.mjt = l_mjt
and x.salesman = l_salesman
and x.kind = l_kind
and x.kolo1 = l_kolo1
and x.done = 'N';
यदि यह किसी अज्ञात ब्लॉक के बजाय संग्रहीत प्रक्रिया में है, तो आप प्रक्रिया/फ़ंक्शन नाम को उपसर्ग के रूप में उपयोग कर सकते हैं, जिसे कुछ लोग पसंद करते हैं। अगर आपकी प्रक्रिया को myproc
. कहा जाता था , उदाहरण के लिए, आप यह कर सकते हैं:
Cursor linija IS
SELECT *
FROM table_x X
where x.mjt = myproc.mjt
and x.salesman = myproc.salesman
and x.kind = myproc.kind
and x.kolo1 = myproc.kolo1
and x.done = 'N';