oracle: отсрочка проверки внешнего ключа не работает - PullRequest
1 голос
/ 19 февраля 2020

oracle: отсрочка проверки внешнего ключа не работает. например,

create table Foo (id number(20,0), name varchar(20), 
    primary key(id));
create table Bar (id number(20,0), name varchar(20), 
    primary key(id),
    constraint FK1 foreign key (id) references Foo (id));

insert into Foo(id,name) values(1, 'foo');
insert into Bar(id,name) values(1, 'bar');

удалить данные:

SET CONSTRAINTS ALL DEFERRED;

delete from Foo;
delete from Bar;

SET CONSTRAINTS ALL IMMEDIATE;

ОШИБКА:

ORA-02292: integrity constraint violated - child record found

1 Ответ

1 голос
/ 19 февраля 2020

Вы не можете отложить ограничение, если оно NOT DEFERRABLE. Ограничение может быть либо отложенным, либо нет, но по умолчанию (если вы не указали явно ни один из способов) это NOT DEFERRABLE.

. В вашем примере кода добавьте ключевое слово deferrable сразу после внешнего ключа. определение ограничения, а затем снова запустить все. Он будет работать как положено.

То есть: отредактируйте следующую строку кода

constraint FK1 foreign key (id) references Foo (id));

в

constraint FK1 foreign key (id) references Foo (id) deferrable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...