मुझे आश्चर्य है कि इस स्थिति में आपका डेटा पहली जगह कैसे मिला, क्योंकि आपकी विदेशी कुंजी not null
हैं . यदि दोनों टेबल शुरू करने के लिए खाली थे, तो आप कभी भी किसी भी टेबल में एक पंक्ति नहीं डाल पाएंगे।
एक पल के लिए इसे अनदेखा करते हुए, आपके परिदृश्य को फिर से बनाते हुए, मुझे बाधाओं को अक्षम करने में कोई समस्या नहीं है:
CREATE TABLE tablea(id NUMBER(19, 0) NOT NULL,
rtablea_id NUMBER(19, 0) NOT NULL,
PRIMARY KEY(id))
/
CREATE TABLE tableb(id NUMBER(19, 0) NOT NULL,
rtableb_id NUMBER(19, 0) NOT NULL,
PRIMARY KEY(id))
/
INSERT INTO tablea
VALUES (1, 2)
/
INSERT INTO tableb
VALUES (2, 1)
/
ALTER TABLE tablea ADD CONSTRAINT fka1
FOREIGN KEY (rtablea_id)
REFERENCES tableb
/
ALTER TABLE tableb ADD CONSTRAINT fkb1
FOREIGN KEY (rtableb_id)
REFERENCES tablea
/
ALTER TABLE tablea MODIFY CONSTRAINT fka1 DISABLE
/
ALTER TABLE tableb MODIFY CONSTRAINT fkb1 DISABLE
/
delete tablea
/
delete tableb
/
commit
/
परिणाम:
Table created.
Table created.
1 row created.
1 row created.
Table altered.
Table altered.
Table altered.
Table altered.
1 row deleted.
1 row deleted.
Commit complete.
मुझे यकीन नहीं है कि आपको ORA-02297
. कैसे मिलेगा विदेशी कुंजी को अक्षम करने का प्रयास करते समय त्रुटि। यह त्रुटि आम तौर पर उस प्राथमिक या अद्वितीय कुंजी को अक्षम करते समय देखी जाती है जिस पर एक विदेशी कुंजी निर्भर करती है।
मुझे संदेह है कि आप वास्तव में क्या करना चाहते हैं, यह बाधाओं को initially deferred
पर सेट करता है . यह आपको प्रत्येक तालिका में व्यक्तिगत रूप से सम्मिलित करने और हटाने की अनुमति देगा, जब तक कि लेन-देन शुरू होने से पहले संबंधित पंक्ति को अद्यतन या हटा दिया गया था:
CREATE TABLE tablea(id NUMBER(19, 0) NOT NULL,
rtablea_id NUMBER(19, 0) NOT NULL,
PRIMARY KEY(id))
/
CREATE TABLE tableb(id NUMBER(19, 0) NOT NULL,
rtableb_id NUMBER(19, 0) NOT NULL,
PRIMARY KEY(id))
/
ALTER TABLE tablea ADD CONSTRAINT fka1
FOREIGN KEY (rtablea_id)
REFERENCES tableb
INITIALLY DEFERRED
/
ALTER TABLE tableb ADD CONSTRAINT fkb1
FOREIGN KEY (rtableb_id)
REFERENCES tablea
INITIALLY DEFERRED
/
INSERT INTO tablea
VALUES (1, 2)
/
INSERT INTO tableb
VALUES (2, 1)
/
INSERT INTO tableb
VALUES (3, 1)
/
COMMIT
/
DELETE tableb
WHERE id = 2
/
UPDATE tablea
SET rtablea_id = 3
WHERE id = 1
/
COMMIT
/
परिणाम:
Table created.
Table created.
Table altered.
Table altered.
1 row created.
1 row created.
1 row created.
Commit complete.
1 row deleted.
1 row updated.
Commit complete.