Всем привет!
Как отредактировать отдельное поле в нередактируемой вьюхе?
Предположим, есть таблица и просмотр, редактируемый триггерами:
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 в поле, если понадобится.

Может, у меня пробел в голове и есть красивое решение?

Reply via email to