Добавление данных в 1 таблицы через триггер для нескольких таблиц - PullRequest
0 голосов
/ 12 января 2020

Как добавить данные в таблицу, которая содержит атрибуты двух разных таблиц, которые не связаны друг с другом?

Таблица 1 имеет col1, col2, col3 (предположим, что все числа) Таблица 2 имеет col4, col5 , col6 (предположим, что все числа) Таблица 3 содержит A, B, C, D, E, F (предположим, все числа)

Вопрос в том, что если какая-либо вставка произойдет в таблице 1 и таблице 2, их данные должны быть загружены в таблицу 3.

Я использовал обычный подход

create or replace trigger trig_name
before insert on table1,table2 --> not allowed
for each row
begin
if inserting then
insert into table3 values (:new.col1,:new.col2,:new.col3,:new.col4,:new.col5,:new.col6)
end if;
end;
/

Так что если бы мне пришлось сделать два разных триггера для таблицы 1 и таблицы 2, не так ли создать две строки данных, оставив некоторые столбцы пустыми?

1 Ответ

0 голосов
/ 12 января 2020

Хотя создание представления, предложенного @EdStevens, (IMO) является превосходным ответом, все, что вы хотите, может быть сделано. И да, это требует 2 триггеров. В Oracle и всех других известных мне СУБД триггер может срабатывать только на 1 таблице.
Однако их можно несколько уменьшить. Нет необходимости в тесте "если вставить". Триггер объявлен как «при вставке», поэтому тест всегда будет верным. Фактическая проблема заключается в том, что вы не можете ссылаться на столбцы из table2 в триггере table1, а также наоборот. Что вам нужно, так это назвать имена столбцов, которые вы вставляете, на самом деле всегда лучший подход . Итак:

create or replace trigger table1_bir
   before insert on table1 
   for each row
begin
     insert into table3(col1, col2, col3)
     values (:new.col1,:new.col2,:new.col3);
end;
/

create or replace trigger table2_bir
   before insert on table2 
   for each row
begin
     insert into table3(col4, col5, col6)
     values (:new.col4,:new.col5,:new.col6);
end;
/  
...