Запускать операции DML при просмотре в SQL - PullRequest
0 голосов
/ 19 мая 2018

Я делаю триггеры, которые делают операции DML на виде.Существует две таблицы примеров:

Vehicle: vehicle_id, size, brand_id

Brand: brand_id, name

Я создал представление:

CREATE OR REPLACE VIEW vehicle_view AS
SELECT vehicle_id, size, brand.name FROM Vehicle
JOIN Brand USING (brand_id)

Как я могу выполнить триггер UPDATE?Я успешно запустил триггер для INSERT, но не могу найти способ создать триггер UPDATE.

CREATE OR REPLACE TRIGGER tr_vehicle_update
INSTEAD OF INSERT OR UPDATE ON vehicle_view
BEGIN
  UPDATE Vehicle SET
    vehicle_id = :new.vehicle_id
    WHERE size = :new.size; 
  UPDATE Brand SET
    brand_id = :new.brand_id
    WHERE name = :new.name; 
END;

1 Ответ

0 голосов
/ 19 мая 2018

BRAND_ID - это внешний ключ, который объединяет две таблицы.Так что вы действительно, действительно не хотите это менять.А VEHICLE_ID является первичным ключом VEHICLE, поэтому вы тоже не хотите его менять.

Вероятно, ваша логика должна быть такой:

CREATE OR REPLACE TRIGGER tr_vehicle_update
INSTEAD OF INSERT OR UPDATE ON vehicle_view
for each row
BEGIN
  if updating then
    if :new.size != :old.size then
       UPDATE Vehicle SET size = :new.size
       WHERE vehicle_id = :new.vehicle_id;
    end if;
    if  :new.name != :old.name then
       UPDATE Brand SET name = :new.name
       WHERE brand_id = :new.brand_id; 
    end if;
  end if;
  -- put your IF INSERTING logic here
END;

Обратите внимание, что триггеры INSTEAD OF могут быть только FOR EACH ROW, поэтому вам нужно указать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...