ऐसा इसलिए है क्योंकि आपके डिकोड स्टेटमेंट का 3 पैरामीटर NULL है; प्रलेखन के अनुसार (मेरा जोर)।
<ब्लॉककोट>Oracle स्वचालित रूप से expr और प्रत्येक खोज मान को तुलना करने से पहले पहले खोज मान के डेटा प्रकार में बदल देता है .... यदि पहले परिणाम में डेटा प्रकार CHAR है या यदि पहला परिणाम शून्य है, तो Oracle रिटर्न मान को डेटा प्रकार VARCHAR2 में बदल देता है ।
आपके मामले में पहला परिणाम NULL है, जिसे Oracle VARCHAR2 के रूप में मानता है। आपका वापसी मूल्य निहित रूप से VARCHAR2 में परिवर्तित किया जा रहा है। अगर आपने अपना DECODE()
बदल दिया है निम्नलिखित के लिए आपको एक नंबर मिलेगा:
select decode(1, 0, 0, 0.75)
और आप NULLIF()
. का उपयोग करके अपना NULL प्राप्त कर सकते हैं समारोह:
select nullif(decode(1, 0, 0, 0.75), 0) ...
CASE कथन का उपयोग करना बेहतर है, जो लागू करता है कि सभी लौटाए गए डेटाटाइप समान हैं:
select case 1 when 0 then null
else 0.75
end ...
<उप>1. जिस पर मैं भी पकड़ा गया हूं।