2014-09-23 9 views
5

मुझे मौजूदा पीके को संशोधित करने की आवश्यकता है। इसलिए मैं इसे फिर से बनाना छोड़ देता हूं।ओआरए -00 9 55 "नाम पहले से ही किसी मौजूदा ऑब्जेक्ट द्वारा उपयोग किया जाता है"

ALTER TABLE B DROP CONSTRAINT PK_B; 
ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH", "QUART"); 

दुर्भाग्य से पिछले वक्तव्य मुझे एक त्रुटि दे देंगे ORA-00,955

अगर मैं पी बाधा बनाने की तरह इसके साथ मूल रूप से परिभाषित किया गया था:

ALTER TABLE B ADD CONSTRAINT PK_B PRIMARY KEY ("TYP", "NR", "HH"); 

सब कुछ ठीक काम करता है।

उत्तर

9

शायद INDEXPRIMARY KEY CONSTRAINT से जुड़ा हुआ है, और इसे PK_B भी नाम दिया गया है।

आप के रूप में यह देख सकते हैं:

SELECT * FROM USER_INDEXES WHERE TABLE_NAME='<table_name>'; 

अगर यह सच है, तो कार्य करें:

ALTER INDEX "PK_B" RENAME TO "PK_XYZ"; 

अद्यतन: ALTER INDEX बयान के बारे में, कुछ महत्वपूर्ण बिंदुओं के रूप में टिप्पणी में जस्टिन ने उल्लेख किया

ओरेकल स्पष्ट रूप सेका समर्थन करने के लिए UNIQUE अनुक्रमणिका बनाता हैचूंकि, इंडेक्स प्राथमिक कुंजी का नाम है, और अब प्राथमिक कुंजी को संशोधित किया जा रहा है, यह बेहतर पुरानी प्राथमिक कुंजी की परिभाषा के अनुसार सूचकांक को फिर से बनाने और फिर से बनाने के लिए है ।

मेरा निष्कर्ष:

  • प्राथमिक कुंजी बाधा एक अद्वितीय सूचकांक के माध्यम से लागू की जाती है।
  • यदि ओरेकल को पहले से ही एक इंडेक्स - अद्वितीय या गैर-अनूठा मिल जाता है - यह प्राथमिक कुंजी के लिए का उपयोग करता है।
  • यदि सूचकांक प्रारंभ में गैर-अद्वितीय के रूप में बनाया गया था, तो यह गैर-अद्वितीय के रूप में दिखाएगा, हालांकि यह वास्तव में एक अद्वितीय अनुक्रमणिका होगी।

एक अच्छा प्रदर्शन है और काफी अन्य पहलुओं पर भी विस्तृत, Arup द्वारा: Primary Keys Guarantee Uniqueness? Think Again.

+0

, हालांकि यह ध्यान रखें अगर वहाँ प्राथमिक कुंजी बाधा, संभावना का तात्पर्य है कि कि सूचकांक अद्वितीय है और पुराने प्राथमिक कुंजी बाधा का समर्थन करने के लिए बनाया गया था के रूप में एक ही नाम के साथ एक सूचकांक है। चूंकि प्राथमिक कुंजी बाधा की परिभाषा बदल दी जा रही है, इसलिए एक अच्छा मौका है कि सूचकांक को छोड़ दिया जाना चाहिए या इसे गैर-अद्वितीय के रूप में फिर से बनाया जाना चाहिए (पुरानी प्राथमिक कुंजी क्या थी) के आधार पर। –

+0

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

0

मैं एक ही मुद्दा है जहाँ मैं करना पड़ा था डेटाबेस पुनः बनाने, जबकि दृश्य से एक मेज के संदर्भ हटाने के लिए निम्न आरंभ से। मैं पहले टेबल और इंडेक्स में इसकी खोज कर रहा था।

connect sys/oracle as sysdba; 
select * from all_tables 
select * from all_indexes 
(finally located the reference in the views) 
select * from all_views where view_name like '%WKSTSTATE%'; 
drop view RUEGEN.WKSTSTATE; 
संबंधित मुद्दे

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