2010-10-13 11 views
21

हाय मैं निम्नलिखितअद्यतन कॉलम को महत्व देता

update userloginstats set logouttime= sysdate where logouttime= null; 

के रूप में एक तालिका को अपडेट करना चाहते लेकिन यह शून्य मान वाले स्तंभ को अद्यतन नहीं किया। क्या गलत है

+1

<एक और जवाब जोड़ने के लिए प्रलोभन का विरोध करना जो वास्तव में वही बात कहता है ...> –

उत्तर

42

...where logouttime is null; 
        ^^^^^^^ 

NULL को बदलें यह एक विशेष मूल्य है और हम इसके साथ हमेशा की तरह = ऑपरेटर का उपयोग नहीं कर सकते।

Oracle documentation for NULL से:

nulls के लिए परीक्षण करने के लिए, का उपयोग केवल तुलना की स्थिति शून्य है और शून्य नहीं है। यदि आप नल के साथ किसी भी अन्य स्थिति का उपयोग करते हैं और नतीजा शून्य के मान पर निर्भर करता है, तो नतीजा अनजान है क्योंकि नल डेटा की कमी का प्रतिनिधित्व करता है, एक शून्य किसी भी मूल्य या किसी अन्य मूल्य के बराबर या असमान नहीं हो सकता है

3

logouttime is null, = null नहीं। null किसी भी चीज़ के बराबर नहीं है, यहां तक ​​कि खुद भी नहीं। इस प्रकार, ऑपरेटर is

2

आप is null उपयोग करने के लिए नहीं = null

update userloginstats set logouttime= sysdate where logouttime is null; 
6

आप = साथ NULLs तुलना नहीं कर सकते की जरूरत है।

इस का उपयोग करें:

update userloginstats set logouttime= sysdate where logouttime is null; 
0

nulls के लिए आप का उपयोग करना चाहिए "शून्य है" या बल्कि = ऑपरेटर की तुलना में "नहीं NULL है"। ऐसा इसलिए है क्योंकि शून्य तकनीकी रूप से न तो सही या गलत है, बल्कि यह किसी भी तरह की कीमत की अनुपस्थिति है।

अधिकांश प्रोग्रामिंग भाषाएं आमतौर पर सुविधा के लिए झूठी झूठी होती हैं (और इस प्रकार = ऑपरेटर के उपयोग को सक्षम करती हैं), लेकिन एसक्यूएल सही और गलत तरीके से अधिक शुद्ध दृष्टिकोण लेता है।

संबंधित मुद्दे