ORA-00001 अद्वितीय बाधा का उल्लंघन डेटा लोड करते समय हमें अक्सर मिलने वाले सामान्य संदेशों में से एक है।
यह ORA-00001 अद्वितीय बाधा उल्लंघन त्रुटि तब होती है जब आपने एक INSERT या UPDATE कथन को निष्पादित करने का प्रयास किया है जिसने एक अद्वितीय अनुक्रमणिका द्वारा प्रतिबंधित फ़ील्ड में एक डुप्लिकेट मान बनाया है।
ORA-00001 को हल करने के लिए चलाने के लिए सूची की जाँच करें
हम इस ORA-00001 के लिए निम्न क्रिया आइटम निष्पादित कर सकते हैं
(1) आप त्रुटि को देख सकते हैं और नीचे दिए गए sql के साथ बाधा जानकारी पा सकते हैं
SELECT column_name, position FROM all_cons_columns WHERE constraint_name = '<name of the constraint in error>' AND owner = '<table owner>' AND table_name = '<table name>'
अब हम अपने द्वारा डाले जा रहे डेटा के साथ मौजूदा डेटा की जांच कर सकते हैं और फिर उसके अनुसार कार्रवाई कर सकते हैं। आप कुंजियों को बदल सकते हैं ताकि उन्हें डाला जा सके
CREATE TABLE EXAMPLE_UNIQ( EXAM_ID NUMBER NOT NULL ENABLE, EXAM_NAME VARCHAR2(250) NOT NULL ENABLE CONSTRAINT UK1_EXAMPLE UNIQUE (EXAM_ID, EXAM_NAME) ENABLE ); table created. INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ'); 1 rows inserted. Commit; INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ'); SQL Error: ORA-00001: unique constraint (UK1_EXAMPLE) violated Solution INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1001, 'XYZ'); 1 rows inserted.
(2) अगर टेबल में डुप्लीकेट की अनुमति है, तो हम प्रतिबंध हटा सकते हैं
उदाहरण
alter table <table name> drop constraint <constraint name>;
(3) 11gr2 संकेत अनदेखी_रो_ऑन_डुपकी_इंडेक्स बयान को चुपचाप ओआरए-00001 त्रुटियों को अनदेखा करने की अनुमति देता है।
- IGNORE_ROW_ON_DUPKEY_INDEX संकेत अन्य संकेतों के विपरीत हैं, जिसमें उनका अर्थ प्रभाव पड़ता है। "संकेत" में समझाया गया सामान्य दर्शन इन तीन संकेतों पर लागू नहीं होता है।
- IGNORE_ROW_ON_DUPKEY_INDEX संकेत केवल सिंगल-टेबल INSERT संचालन पर लागू होता है। यह UPDATE, DELETE, MERGE, या मल्टीटेबल इंसर्ट ऑपरेशंस के लिए समर्थित नहीं है। IGNORE_ROW_ON_DUPKEY_INDEX स्टेटमेंट को कॉलम के एक निर्दिष्ट सेट के लिए या एक निर्दिष्ट इंडेक्स के लिए एक अद्वितीय कुंजी उल्लंघन को अनदेखा करने का कारण बनता है। जब एक अद्वितीय कुंजी उल्लंघन का सामना करना पड़ता है, तो एक पंक्ति-स्तरीय रोलबैक होता है और निष्पादन अगली इनपुट पंक्ति के साथ फिर से शुरू होता है। यदि आप डीएमएल त्रुटि लॉगिंग सक्षम के साथ डेटा सम्मिलित करते समय इस संकेत को निर्दिष्ट करते हैं, तो अद्वितीय कुंजी उल्लंघन लॉग नहीं होता है और कथन समाप्ति का कारण नहीं बनता है।
यदि विशिष्ट नियमों का उल्लंघन किया जाता है तो इस संकेत का अर्थपूर्ण प्रभाव त्रुटि संदेशों में परिणत होता है:
- यदि आप अनुक्रमणिका निर्दिष्ट करते हैं, तो अनुक्रमणिका मौजूद होनी चाहिए और अद्वितीय होनी चाहिए। अन्यथा, कथन ORA-38913 का कारण बनता है।
- आपको ठीक एक इंडेक्स निर्दिष्ट करना होगा। यदि आप कोई अनुक्रमणिका निर्दिष्ट नहीं करते हैं, तो कथन ORA-38912 का कारण बनता है। यदि आप एक से अधिक अनुक्रमणिका निर्दिष्ट करते हैं, तो कथन ORA-38915 का कारण बनता है।
- आप INSERT कथन में CHANGE_DUPKEY_ERROR_INDEX या IGNORE_ROW_ON_DUPKEY_INDEX संकेत निर्दिष्ट कर सकते हैं, लेकिन दोनों नहीं। यदि आप दोनों को निर्दिष्ट करते हैं, तो कथन ORA-38915 का कारण बनता है।
- सभी संकेतों की तरह, संकेत में एक सिंटैक्स त्रुटि के कारण इसे चुपचाप अनदेखा कर दिया जाता है। नतीजा यह होगा कि ORA-00001 का कारण होगा, जैसे कि कोई संकेत इस्तेमाल नहीं किया गया था।
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */ into unique_table (select * from non_unique_table);
संबंधित लेख
ORA-00911:अमान्य वर्ण
ORA-03113:संचार चैनल पर फ़ाइल का अंत
ORA-00257
ORA-29285:फ़ाइल लिखने में त्रुटि
बाहरी तालिकाओं के साथ ORA-29913
ऑरैकल में क्वेरी हटाएं
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm