2011-01-14 12 views
6

ओरेकल स्थगित बाधाओं में केवल प्रतिबद्धता के बिंदु पर चेक किया जाता है।कॉलम नल डिफ्रैरबल

नलिका बाधा के मामले में डिफ्रैबल क्लॉज का क्या अर्थ है? उदाहरण के लिए

create table test(a number not null deferrable, b number); 
insert into test(a,b) values (222, 111); 
commit; 

इन बयानों के बाद मैंने सोचा कि निम्नलिखित कोड

update test set a = null where b = 111; 
delete test where b = 111; 
commit; 

काम करेगा लेकिन ऐसा नहीं है।

दो परिभाषाओं के बीच क्या अंतर है?

create table test1(a number not null deferrable, b number); 
create table test2(a number not null, b number); 

उत्तर

10

यहां दो विकल्प हैं। या तो आप UPDATE बयान है कि आपके द्वारा परिभाषित करने से पहले चलाने की जानी चाहिए आदेश नीचे

SET CONSTRAINTS ALL DEFERRED; 

यह दिखाया गया है का उपयोग करके स्थापित करने के लिए बाधा लेन-देन के भीतर टाल जाने की जरूरत है।

वैकल्पिक रूप से आप तालिका परिभाषा INITIALLY DEFERRED

create table test(a number not null initially deferred deferrable, b number); 

होने के लिए बाधा सेट कर सकते हैं इन बातों का या तो करने के बाद, आप तो DML हैं कि विवादित है चलाने के लिए सक्षम होना चाहिए।

+1

हाँ, आप सही हैं। अनिवार्य रूप से मेरे कोड काम करता है। धन्यवाद। –

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