2010-12-03 13 views
7

मैं एक डेटाबेस बना रहा हूं जो विदेशी कुंजी से मूल्यों तक पहुंचने का प्रयास कर रहा है। मैंने दो निम्नलिखित टेबल बनाए हैंएसक्यूएल त्रुटि: ओआरए -022 9 1: अखंडता बाधा

CREATE TABLE Component(
    ComponentID varchar2(9) PRIMARY KEY 
    , TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID) 
) 

INSERT INTO Component VALUES(192359823,785404309) 
INSERT INTO Component VALUES(192359347,785404574) 
INSERT INTO Component VALUES(192359467,785404769) 
INSERT INTO Component VALUES(192359845,785404867) 
INSERT INTO Component VALUES(192359303,785404201) 
INSERT INTO Component VALUES(192359942,785404675) 


CREATE TABLE TypeComponent (
    TypeComponentID varchar2(9) PRIMARY KEY 
    , Type_Description varchar2(30) CONSTRAINT Type_Description 
     CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL 
) 

INSERT INTO TypeComponent VALUES(785404309, 'Strap') 
INSERT INTO TypeComponent VALUES(785404574, 'Stud') 
INSERT INTO TypeComponent VALUES(785404769, 'Buckle') 
INSERT INTO TypeComponent VALUES(785404867, 'Strap') 
INSERT INTO TypeComponent VALUES(785404201, 'Buckle') 
INSERT INTO TypeComponent VALUES(785404675, 'Stud') 

ये दो टेबल हैं। Component और TypeComponentComponentTypeComponent को मूल इकाई है, और मैं निम्नलिखित सम्मिलित बयान को चलाने के लिए कोशिश कर रहा हूँ:

INSERT INTO Component VALUES(192359823,785404309) 

लेकिन यह मुझे त्रुटि

दे रहा है इस सत्र में मैं Oracle SQL देव में अब तक है कि है

+0

क्या आप अपना पूरा सत्र पोस्ट कर सकते हैं और अपनी पोस्ट को थोड़ा सा सुधार सकते हैं? –

+0

जब भी आप SQL कथन और त्रुटि लॉग दर्ज करते हैं, तो कृपया कथन का चयन करें और कोड पर क्लिक करें (यानी, '1010' के साथ आइकन, ताकि यह सुगम हो। धन्यवाद। – Sathya

उत्तर

6

पहली बार अपने TypeComponent तालिका में डालने की कोशिश करो, तो में डालने डालने से पहले TypeComponent में मौजूद होने की जरूरत है आपकी Component तालिका।

त्रुटि के अनुसार:

ORA-02291:    integrity constraint (string.string) violated - parent key not found
Cause:            A foreign key value has no matching primary key value.
Action:            Delete the foreign key or add a matching primary key.

इसका मतलब यह है कि वहाँ अपने संदर्भित तालिका में कोई मिलान कुंजी।

संपादित करें # 1

अपनी तरह की जानकारी के लिए यहां एक साइट है जहाँ आप ओरेकल त्रुटि कोड के सभी के साथ मदद मिल सकती है।

http://[ora-02291].ora-code.com/

यहाँ इस साइट के लिए होमपेज पर है: http://www.ora-code.com/

कहाँ URL में त्रुटि कोड की जगह ले सकती आपको मिलने वाला त्रुटि कोड के अनुरूप करने के लिए, और आप के लिए पहुँच जाएगा इस त्रुटि के लिए पेज।

+0

तो क्या आप कह रहे हैं कि मुझे दो तालिकाओं को छोड़ना चाहिए, फिर टाइपकंपोनेंट तालिका को पहले बनाएं, फिर घटक तालिका में कथन डालें? – David

+0

आदर्श रूप से, पता है कि निर्भर क्या है, और क्या नहीं है। आपके परिदृश्य में, 'घटक' 'TypeComponent' पर निर्भर करता है। मुझे इसे परमाणु वस्तु की तरह सोचना पसंद है। यह स्वयं ही अस्तित्व में हो सकता है। दूसरी तरफ, 'घटक' मौजूद नहीं हो सकता 'TypeComponent' के बिना, क्योंकि इसके 'TypeID' फ़ील्ड' TypeComponent' तालिका की प्राथमिक कुंजी का संदर्भ देता है। इसलिए, 'घटक' में डालने पर, डेटाबेस इंजन उस संदर्भ के लिए जांचता है जिसे आप इसे दे रहे हैं, 'TypeComponent.TypeComponentID' का मान, और चूंकि इसे नहीं मिल रहा है, इसलिए यह सम्मिलन को अस्वीकार करता है, अन्यथा आपके पास डेटा अखंडता चिंता होगी। –

+0

मुझे नहीं लगता कि टेबल निर्माण आदेश यहां एक मुद्दा है, क्योंकि आपने कहा था कि वे दोनों आपके डेटाबेस में मौजूद हैं। इसके अलावा, अगर आपने 'घटक' से पहले 'टाइपकंपोनेंट' तालिका बनाई होगी, तो संभवतः यह स्पष्ट हो गया होगा कि 'घटक' में डालने के लिए पंक्ति को 'टाइपकंपोनेंट' में मौजूद होना आवश्यक है। –

2

कृपया अपना संपूर्ण SQLPLUS सत्र पोस्ट करें ताकि त्रुटि आसानी से पुन: उत्पन्न हो सके।

ऐसा लगता है कि बच्चे की तालिका में डालने से पहले मूल तालिका में डालने से पहले किया जा रहा है जो इस त्रुटि का कारण बन रहा है।

आवेषण का क्रम बदलें और अपना कोड दोबारा शुरू करें।

SQL> CREATE TABLE TypeComponent(
    2 TypeComponentID varchar2(9) PRIMARY KEY, 
    3 Type_Description  varchar2(30) 
    4 CONSTRAINT Type_Description CHECK(Type_Description IN('Strap', 'Buckle', 'Stud')) NOT NULL 
    5 ) 
    6 ; 

Table created. 

SQL> CREATE TABLE Component(
    2 ComponentID varchar2(9) PRIMARY KEY, 
    3 TypeID varchar2(9) REFERENCES TypeComponent(TypeComponentID) 
    4 ) 
    5 ; 

Table created. 

SQL> INSERT INTO Component VALUES(192359823,785404309); 
INSERT INTO Component VALUES(192359823,785404309) 
* 
ERROR at line 1: 
ORA-02291: integrity constraint (COAMGR.SYS_C002513823) violated - parent key 
not found 

SQL> INSERT INTO TypeComponent VALUES(785404309, 'Strap'); 

1 row created. 

SQL> INSERT INTO Component VALUES(192359823,785404309); 

1 row created. 

SQL> commit; 

Commit complete. 
1

component तालिका में आप

TypeID REFERENCES TypeComponent(TypeComponentID) 

है और फिर आप

INSERT INTO Component VALUES(192359823,785404309) 

के साथ आगे बढ़ना आप निष्पादित यदि यह पहले, तो ओरेकल Integrity constraint त्रुटि क्योंकि आप में डालने के लिए कोशिश कर रहे हैं फेंक होगा component एक मान तालिका है जो TypeComponent तालिका में मौजूद नहीं है।

यह एक समस्या है क्योंकि आप का उल्लेख किया है TypeID एक विदेशी कुंजी है, यानी है कि है, TypeID के मूल्य में Component

+3

वर्थ एक सामान्य नियम को इंगित करते हुए: डेटा पॉप्युलेट करते समय, * संदर्भ * डेटा पहले (इसलिए घटक * प्रकार * संदर्भ डेटा है), फिर मुख्य डेटा। – araqnid

1

यह त्रुटि संदर्भित कुंजी (मेरे मामले में विदेशी कुंजी) के साथ कुछ बार मौजूद है, इसमें त्रुटियां हैं। कृपया तालिका में संदर्भित कुंजी को फिर से बनाएं।

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