Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle का DECODE मुझे NVL से भिन्न मान क्यों दे रहा है?

ऐसा इसलिए है क्योंकि आपके डिकोड स्टेटमेंट का 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. जिस पर मैं भी पकड़ा गया हूं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ट्रिगर ORA-04098:ट्रिगर अमान्य है और पुन:सत्यापन विफल रहा है

  2. समय क्षेत्र के लिए Oracle दिनांक स्वरूपण मुखौटा क्या है?

  3. Oracle:अनुक्रम MySequence.currval इस सत्र में अभी तक परिभाषित नहीं किया गया है

  4. Oracle कई स्तंभों को एक में मिलाता है

  5. क्या कोई Oracle SQL सर्वर के OUTPUT INSERTED के समतुल्य है।*?