Всем привет!
Как отредактировать отдельное поле в нередактируемой вьюхе?
Предположим, есть таблица и просмотр, редактируемый триггерами:
create table T (
PK integer not null primary key,
A integer,
B integer);
create view V as -- Пусть он по каким-то причинам
select * from T; -- НЕ будет naturally updatable
1) Если триггер на апдейт такой:
create trigger V_BI_SIMPLE for V
active before update
as begin
update T
set A = new.A, B = new.B
where PK = old.PK;
end
то запрос на изменение _одного_ поля в строке вьюхи
обNULLит второе неключевое поле. Т.е. после
update V
set A = 123
where PK = 456;
будет A=123 B=NULL, предыдущее значение B потеряется.
2) Если триггер на апдейт посложнее, с проверкой на NULL:
create trigger V_BI_COMPLEX for V
active before update
as begin
if (new.A is not null) then
update T
set A = new.A
where PK = old.PK;
if (new.B is not null) then
update T
set B = new.B
where PK = old.PK;
end
то это, во-первых, коряво, особенно если полей много,
а во-вторых, не позволит занести NULL в поле, если понадобится.
Может, у меня пробел в голове и есть красивое решение?