Вопрос

Как бы вы организовали удаление записей из дочерней таблицы, при удалении записей из родительской таблицы, на которые они ссылаются?

Указание ON DELETE CASCADE в определении ключа приведёт заодно с удалением родительской записи к автоматическому удалению подчинённых записей.

CREATE TABLE X 
(a INTEGER) TABLESPACE MIRAVILD_DATA;

CREATE UNIQUE INDEX X_U_IDX ON X (a) TABLESPACE MIRAVILD_INDEX;

ALTER TABLE X ADD CONSTRAINT X_PK PRIMARY KEY (a) 
USING INDEX X_U_IDX ENABLE VALIDATE;
/

CREATE TABLE Y
(b INTEGER, c INTEGER) TABLESPACE MIRAVILD_DATA;
 
ALTER TABLE Y ADD CONSTRAINT Y_X_FK FOREIGN KEY (c) 
REFERENCES X (a) ON DELETE CASCADE ENABLE;

CREATE UNIQUE INDEX Y_U_IDX ON Y (b) TABLESPACE MIRAVILD_INDEX;

ALTER TABLE Y ADD CONSTRAINT Y_PK PRIMARY KEY (b) 
USING INDEX Y_U_IDX ENABLE VALIDATE;
/
INSERT INTO x VALUES (1);
INSERT INTO y VALUES (2, 1);

COMMIT WORK;
/

DELETE FROM x;

COMMIT WORK;
/

Обе таблицы пусты.

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags: , ,

Leave a Reply

You must be logged in to post a comment.