Допустим, у нас есть следующее:
create view view_1 as
(
select key, data from some_table_or_view;
);
create table table_1
(
key
more_data
);
create view view_2 as
(
select v1.key, v1.data, t1.more_data
from view_1 v1, table_1 t1
where v1.key = t1.key
);
create table table_2 as
(
key
data
more_data
);
create view view_3 as
(
select key, data, more_data from view_2
union
select key, data, more_data from table_2
);
Итак, по сути, мы объединили два потока данных, один из которых поступил из объединения, а другой - необработанные данные.
Я хочу иметь возможность сделать следующее.
update view_3 set more_data = 'BLAH_MORE_DATA' where key = 'BLAH_KEY';
Где это каким-то образом обновляет либо table_1
, либо table_2
, в зависимости от того, происходит ли BLAH_KEY от table_1
или table_2
.
В настоящее время я могу думать только о следующем:
create view view_3 as
(
select 'TAB1' as source, key, data, more_data from view_2
union
select 'TAB2' as source, key, data, more_data from table_2
);
и затем выполнение обновлений с использованием функции PL / SQL, которая проверяет исходный столбец и обновляет соответствующую таблицу, но это означает, что я должен синхронизировать представление и функцию PL / SQL.
Я ищу более хороший способ сделать это.