Ну и скажи мне что должно вставится и куда вот на это

create view _для_особо_одарённых_
select a.f, b.f, a.f + c.f  from a join b on a.id = b.id join c on b.id = c.id


По моей логике - то что в единственном триггере INSTEAD OF прописано.


Я вчера когда в трекер писал - хорошую аналогию придумал. Можно сравнить таблицу с родительским объектом, а представление с её наследником. Соответственно команда INSERT - это виртуальный метод объекта "таблица", а триггер на представление - это метод, который перекрывает базовый виртуальный метод.

Итого что мы имеем. Что базовый виртуальный метод может быть перекрыт 512-ю методами одновременно? Бред, не так ли? Однако по сути это делают триггеры на представления. И почему то многие (тот же ДК, Дед) считают EXECUTE STATEMENT злом, а вот эту вот кривизну - нет, она нормальная, с ней всё в поряде и ничё не надо менять - нужно так и юзать.


И ещё я для вас специально повторю зачем мне захотелось в AFTER INSERT присвоить заначение в NEW. Это только потому что во вьюху с клиента запись вставляется с помощью INSERT ... RETURNING ID, и если я просто сделаю вствку в таблицу (ПК назначается в триггере на таблицу), то на клиента RETURNING мне вернёт ID = NULL.

Ответить