Comment supprimer un field qui référence un parent sans cascade delete
Bonjour tout le monde!
En gros, j'ai la base suivante: 3 tables dont une référence les 2 autres (1 avec cascade delete et l'autre non)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| create table RANDR.RIJA_ENTITY (
"ID" varchar2(38),--equivalent UNIQUEIDENTIFIER
"DONNEE" varchar2(50),
CONSTRAINT "PK_RIJA_ENTITY" PRIMARY KEY(ID)
/
create table RANDR.RIJA_WIRES(
"ID" varchar2(38) ,
"DONNEE" varchar2(50),
CONSTRAINT "PK_RIJA_WIRES" PRIMARY KEY(ID)
/
create table RANDR.RIJA_LNK_WIRES (
"ID" varchar2(38) ,
"IDWIRE" varchar2(38) NOT NULL,
"IDEQUIPMENT" varchar2(38) NOT NULL,
CONSTRAINT "PK_RIJA_LNK_WIRES" PRIMARY KEY(ID)
/
ALTER TABLE RANDR.RIJA_LNK_WIRES ADD CONSTRAINT FK_666
FOREIGN KEY (IDWire) REFERENCES RANDR.RIJA_WIRES(ID)
/
ALTER TABLE RANDR.RIJA_LNK_WIRES ADD CONSTRAINT FK_777
FOREIGN KEY (IDEquipment) REFERENCES RANDR.RIJA_ENTITY(ID) ON DELETE CASCADE
/
insert into RANDR.RIJA_Entity(ID,donnee) values('{E8D441F7-6ACB-4CF3-B537-DD074C960193}','Entity1')
/
insert into RANDR.RIJA_Entity(ID,donnee) values('{5404F834-3338-4D08-90CA-04BDA66809FE}','Entity2')
/
insert into RANDR.RIJA_Wires(ID,donnee) values('{4D67A994-E42B-4B3C-BD06-B26CB4A11086}','WireA')
/
insert into RANDR.RIJA_Wires(ID,donnee) values('{3ABF4812-62ED-40DC-8ECE-A591E17B72AE}','WireB')
/
insert into RANDR.RIJA_LNK_Wires(ID,IDWire,IDEquipment) values('{FFBF4812-62ED-40DC-8ECE-A591E17B72AE}','{4D67A994-E42B-4B3C-BD06-B26CB4A11086}','{E8D441F7-6ACB-4CF3-B537-DD074C960193}')
/
insert into RANDR.RIJA_LNK_Wires(ID,IDWire,IDEquipment) values('{00BF4812-62ED-40DC-8ECE-A591E17B72AE}','{3ABF4812-62ED-40DC-8ECE-A591E17B72AE}','{5404F834-3338-4D08-90CA-04BDA66809FE}')
/
CREATE OR REPLACE TRIGGER RANDR.A_D_RIJA_LNK_Wires
AFTER DELETE ON RANDR.RIJA_LNK_Wires
for each row
Begin
DELETE FROM RIJA_Wires WHERE ID = :old.IDWire ;
end; |
Mais
Code:
1 2 3 4 5 6 7
| delete from RANDR.RIJA_Entity where donnee = 'Entity1'
1 row deleted.
delete from RANDR.RIJA_Wires where donnee = 'WireB'
*
ERROR at line 1:
ORA-02292: integrity constraint (RANDR.FK_666) violated - child record found |
Je comprends que la DELETE n°2 a causé cette erreur car on supprime un field parent qui est référencé par un field fils
Mais je ne comprends pas la DELETE n°1 qui est à 100 % OK alors qu'il y a "delete from RANDR.RIJA_Wires where donnee = 'WireB'" exécuté par le trigger
J'avais eu peur qu'il y aura l'erreur mutating table mais il n'y en a pas!!