#oracle
#Oracle
Вопрос:
Как мне использовать триггер для удаления из нескольких таблиц? «название» (страны) — это внешний ключ в таблицах fronteer, locate, cross
Я написал это, оно компилируется, но когда я попытался выполнить процедуру, связанную с «deletecountry», оно говорит
01732. 00000 - "data manipulation operation not legal on this view"
Вот триггер
CREATE OR REPLACE TRIGGER t_d_country
INSTEAD OF DELETE ON country
FOR EACH ROW
BEGIN
delete from fronteer where namep=:OLD.name or namef=:OLD.name;
delete from locate where namep=:OLD.name;
delete from cross where name=:OLD.name;
delete from country where name=:OLD.name;
END;
/
Ответ №1:
В одном из представлений есть такие операторы, как DISTINCT
, GROUP BY
, и т.д. или явно созданные с WITH READ ONLY
помощью предложения.
Взгляните на ОГРАНИЧЕНИЕ с ON DELETE CASCADE
помощью, оно может решить ваши требования намного проще (в противном случае просмотрите свой дизайн данных):
ALTER TABLE locate ADD (
CONSTRAINT locate_country_FK
FOREIGN KEY (NAME)
REFERENCES country (NAME)
ON DELETE CASCADE);