удаление при срабатывании в нескольких представлениях

#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);