ORA-2270 त्रुटि एक सीधी तार्किक त्रुटि है:यह तब होता है जब हम विदेशी कुंजी में जो कॉलम सूचीबद्ध करते हैं, वे प्राथमिक कुंजी या मूल तालिका पर अद्वितीय बाधा से मेल नहीं खाते हैं। इसके सामान्य कारण हैं
- माता-पिता के पास प्राथमिक कुंजी या पूरी तरह से अद्वितीय बाधा नहीं है
- विदेशी कुंजी खंड मूल तालिका में गलत कॉलम का संदर्भ देता है
- पैरेंट टेबल की बाधा एक कंपाउंड की है और हमने फॉरेन की स्टेटमेंट में सभी कॉलम्स को रेफर नहीं किया है।
आपके पोस्ट किए गए कोड में ऐसा नहीं लगता है। लेकिन यह एक लाल हेरिंग है, क्योंकि आपका कोड नहीं चलता जैसा कि आपने इसे पोस्ट किया है। पिछले संपादनों को देखते हुए मुझे लगता है कि आप अपना वास्तविक कोड नहीं बल्कि कुछ सरलीकृत उदाहरण पोस्ट कर रहे हैं। दुर्भाग्य से सरलीकरण की प्रक्रिया में आपने ORA-2270 त्रुटि पैदा करने वाली किसी भी चीज़ को मिटा दिया है।
SQL> CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID NUMBER,
CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
); 2 3 4 5 6
Table created.
SQL> CREATE TABLE USER
(
ID NUMBER NOT NULL ,
CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
); 2 3 4 5
CREATE TABLE USER
*
ERROR at line 1:
ORA-00903: invalid table name
SQL>
वह कथन विफल हुआ क्योंकि USER एक आरक्षित कीवर्ड है इसलिए हम किसी तालिका को USER नाम नहीं दे सकते। आइए इसे ठीक करें:
SQL> 1
1* CREATE TABLE USER
SQL> a s
1* CREATE TABLE USERs
SQL> l
1 CREATE TABLE USERs
2 (
3 ID NUMBER NOT NULL ,
4 CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
5* )
SQL> r
1 CREATE TABLE USERs
2 (
3 ID NUMBER NOT NULL ,
4 CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
5* )
Table created.
SQL> Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USERS(ID);
Table altered.
SQL>
और लो! कोई ORA-2270 त्रुटि नहीं।
काश, आगे आपकी सहायता करने के लिए हम यहाँ बहुत कुछ नहीं कर सकते। आपके कोड में एक बग है। आप अपना कोड यहां पोस्ट कर सकते हैं और हम में से कोई आपकी गलती का पता लगा सकता है। या आप अपना खुद का कोड देख सकते हैं और इसे अपने लिए खोज सकते हैं।
नोट:कोड के पुराने संस्करण में HOB.USERID को VARCHAR2(20) के रूप में परिभाषित किया गया है। चूंकि USER.ID को NUMBER के रूप में परिभाषित किया गया है, इसलिए विदेशी कुंजी बनाने का प्रयास एक अलग त्रुटि उत्पन्न करेगा:
<ब्लॉककोट>ORA-02267:स्तंभ प्रकार संदर्भित स्तंभ प्रकार के साथ असंगत है
बेमेल से बचने का एक आसान तरीका कॉलम के डेटाटाइप को डिफॉल्ट करने के लिए विदेशी कुंजी सिंटैक्स का उपयोग करना है:
CREATE TABLE USERs
(
ID number NOT NULL ,
CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
);
CREATE TABLE JOB
(
ID NUMBER NOT NULL ,
USERID constraint FK_USERID references users,
CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
);