2012-06-26 9 views
6

मैं ओरेकल 11 जी के साथ काम करता हूं।क्लॉज में अपवाद एक बाधा उत्पन्न करते समय काम नहीं करते

create table test (one number(2), two number(2)); 

2 पंक्तियों के होते हैं::
मैं एक मेज है

insert into test (one, two) values (1, 1); 
insert into test (one, two) values (2, null); 
commit; 

अब मैं एक अपवाद तालिका बनाने:

create table exceptions(row_id rowid, 
         owner varchar2(30), 
         table_name varchar2(30), 
         constraint varchar2(30)); 

अब मैं परीक्षण के लिए प्राथमिक कुंजी बनाना चाहते हैं :

alter table test add constraint test_pk primary key (one, two) exceptions into exceptions; 

बेशक मुझे निम्न त्रुटि मिलती है: ORA-01449

लेकिन अपवाद के कारण अपवाद तालिका में नहीं है?

क्या कोई मेरी मदद कर सकता है। अग्रिम धन्यवाद

वोल्फगैंग

+1

बैश ओरेकल धागे स्पष्ट रूप से अंक प्राप्त करने का एक त्वरित तरीका हैं ... यह +2 एक टिप्पणी के साथ कैसे है? आपको जो त्रुटि मिलती है वह आपको बताती है कि प्राथमिक कुंजी फ़ील्ड में नल नहीं हो सकते हैं। इसका मतलब यह नहीं है कि ओरेकल अपवाद काम नहीं करते हैं। अपनी मेज को देखो, क्या आप कोई बाधा देखते हैं? – tbone

+2

@tbone, यह अपवाद हैंडलिंग के बारे में नहीं है। यह खंड में "अपवाद" के बारे में है। ओपी क्या वर्णन कर रहा है वह बिल्कुल मामला है, और यह एक वैध सवाल है क्योंकि दस्तावेज़ीकरण आपको यह जानकारी नहीं बताता है। समस्या यह है कि आप एक चरण में बाधा और रिपोर्ट अपवाद नहीं बना सकते हैं। ओरेकल यह "झुकाव" कैसे है? – DCookie

+1

@DCookie मैं इसे "अपवाद" खंड के बारे में समझता हूं, लेकिन शीर्षक "ऑरैक अपवाद काम नहीं करता" है। यह ओरेकल मुद्दा नहीं है (जब यह भी बनाया जा सकता है तो बाधा लॉग अपवाद कैसे हो सकता है, आपको या तो इसे नल लोड करने से पहले इसे बनाना होगा या जैसा कि आप इसे अक्षम बनाने के सुझाव देते हैं)। एक बार बनाया गया, यह अपनी नौकरी कर सकते हैं। मुझे बस यह मजाकिया लगता है कि मैं कई "ओरेकल चूसने" धागे में भाग गया जो तुरंत अंक प्राप्त करता है, ठीक है, मुझे नहीं पता। उदाहरण के लिए, http://stackoverflow.com/questions/11191299/why-is-there-a- अधिकतम- लम्बाई-for-stored-procedure- नाम देखें। – tbone

उत्तर

8

ऐसा करने के लिए, आपको सबसे पहले बनाने बाधा अक्षम करना होगा:

ALTER TABLE test ADD CONSTRAINT test_pk PRIMARY KEY (one, two) DISABLE; 

फिर, अपवादों के साथ बाधा सक्षम:

ALTER TABLE TEST ENABLE CONSTRAINT test_pk EXCEPTIONS INTO exceptions; 

तो फिर तुम परिणाम का चयन कर सकते हैं:

SQL> SELECT * FROM EXCEPTIONS; 

ROW_ID    OWNER TABLE_NAME CONSTRAINT 
------------------ ----- ---------- ---------- 
AAHpV4AAHAAApliAAB XXX TEST  TEST_PK 
संबंधित मुद्दे