मेरे पास एक डेटाबेस है जिसमें एक क्षेत्र पर एक पूर्ण नाल बाधा नहीं है, और मैं इस बाधा को दूर करना चाहता हूं। जटिल कारक यह है कि इस बाधा का एक सिस्टम-परिभाषित नाम है, और उस बाधा का नाम उत्पादन सर्वर, एकीकरण सर्वर और विभिन्न डेवलपर डेटाबेस के बीच भिन्न होता है। हमारी वर्तमान प्रक्रिया स्क्रिप्ट बदलने की जाँच करने के लिए है, और एक स्वचालित कार्य लक्ष्य डेटाबेस के खिलाफ sqlplus के माध्यम से उचित प्रश्नों को निष्पादित करता है, इसलिए मैं एक समाधान पसंद करूँगा जिसे सीधे sqlplus में भेजा जा सके।
अपने स्वयं के डेटाबेस पर, एसक्यूएल इसे छोड़ने के लिए होगा:
alter table MYTABLE drop constraint SYS_C0044566
जब मैं all_constraints
दृश्य को क्वेरी करता हूं तो मैं बाधा देख सकता हूं :
select * from all_constraints where table_name = 'MYTABLE'
लेकिन मुझे यकीन है कि कैसे साथ काम करने के लिए नहीं कर रहा हूँ SEARCH_CONDITION
के LONG
डेटा प्रकार या सबसे अच्छा कैसे गतिशील रूप से देखा-अप बाधा मैं अपने नाम पता होने के बाद भी नष्ट करने के लिए।
तो, मैं एक परिवर्तन स्क्रिप्ट कैसे बना सकता हूं जो इस बाधा को गिरा सकती है कि यह क्या है, इसके बजाय इसका नाम क्या है?
संपादित करें: @ एलन का उत्तर एक अच्छा है, लेकिन मैं चिंतित हूं (ओरेकल विशेषज्ञता की मेरी कमी में) कि यह सार्वभौमिक रूप से सच नहीं हो सकता है कि किसी भी बाधा जिसका सिस्टम-जनित नाम हो सकता है, उसके साथ जुड़ा होगा जो इसे हटाने का एक तरीका होगा इसके नाम को जाने बिना बाधा। क्या यह सच है कि तार्किक रूप से उस बाधा को दूर करने के लिए एक सिस्टम-नाम वाले बाधा का नाम जानने से बचने का एक तरीका हमेशा रहेगा?