2011-05-02 6 views
9

मैं अपने डेटाबेस में बाधाओं को बदल रहा हूं और मुझे उनमें से कुछ को छोड़ना होगा। मुझे पता है कि एक भी बाधा के लिए, आदेश पीछा कर रहा है:एक बार में एक से अधिक बाधाओं को कैसे छोड़ें (ओरेकल, एसक्यूएल)

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name; 

हालांकि, जब मैं कोशिश

ALTER TABLE tblApplication DROP (
    CONSTRAINT constraint1_name, 
    CONSTRAINT constraint2_name 
); 

यह काम नहीं करता और मैं क्या करने की जरूरत:

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name; 
ALTER TABLE tblApplication DROP CONSTRAINT constraint2_name; 

क्या एक ही कमांड में एक से अधिक बाधाओं को हटाने का कोई तरीका है? मैं ALTER TABLE tblApplication दोहरा, बस ADD कमांड के साथ की तरह से बचने के लिए करना चाहते हैं:

ALTER TABLE tblApplication 
    ADD { 
    CONSTRAINT contraint1_name FOREIGN KEY ... ENABLE, 
    CONSTRAINT contraint2_name FOREIGN KEY ... ENABLE, 
}; 
+0

पर परीक्षण किया जाता है अपने ऐड उदाहरण में आप का इस्तेमाल किया है कोष्ठक के बजाय घुंघराले ब्रेसिज़। – climmunk

उत्तर

20

हाँ आप कर सकते हैं। आपको बस प्रति बाधा 'ड्रॉप बाधा' दोहराने की जरूरत है। जैसे

alter table t1 
drop constraint fk1 
drop constraint fk2 
/

संपादित करें: मैंने ओरेकल 11 के खिलाफ इसका परीक्षण किया, और यह ठीक काम किया। पुराने संस्करणों के बारे में पता नहीं है।

+0

भी 10 जी में काम करता है। – DCookie

+0

निष्पक्ष होने के लिए, वैकल्पिक तालिका पर ओरेकल दस्तावेज़ एक काफी मुश्किल पढ़ा गया है। मुझे एक वाक्य खोजने में थोड़ी देर लग गई जिसमें कहा गया है कि कई ड्रॉप क्लॉज की अनुमति है। सिंटैक्स आरेख इसे बिल्कुल स्पष्ट नहीं करता है, और कोई भी मामला बना सकता है कि यह अनुमति नहीं देता है। – DCookie

+0

धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। –

0

वहाँ एक तालिका में किसी स्तंभ से संबंधित बाधाओं ड्रॉप करने भी CASCADE साथ स्तंभ छोड़ने एक विकल्प के रूप है:

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS; 

यह Oracle 11g

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