Hello, Sasha!
sasha wrote:
1) Язык SQL - он как бейсик. Он для написания команд на английском языке. Если читать команду и не знать ньюансов, то логика будет понята неправильно. Т.е. когда человек читает слово BEFORE/AFTER INSERT, то он что думает? Что этот триггер выполнится ДО или ПОСЛЕ, а никак не ВМЕСТО. Это сбивает с толку, может быть понято неправильно и привести к ошибке, потому плохо.
очень трудно понять, почему new не работает в after, и работает в before?
2) Нарушено единообразие написания триггеров. В триггерах для таблиц не нужно писать дополнительных команд, а в триггерах для представлений нужно. Дополнительные команды легко можно забыть написать. Это является потенциальным источником ошибок, потому плохо.
view это запрос. в отличие от таблицы. Поэтому перекрывая ОБНОВЛЯЕМОЕ view триггером ты перекрываешь операцию обновления полностью. Это удобно и замечательно. Особенно с учетом того, что чаще встречаются НЕОБНОВЛЯЕМЫЕ автоматически view, чем обновляемые.
3) Некоторым не нужно отключать стандартные операции. Щас это невозможно сделать без ручного труда, что создаёт дискомфорт и является дополнительным потенциальным источником ошибок, потому это плохо.
нынешнее поведение на 100% соответствует документации. Аминь.
4) Заявлено что триггеры на представления несут логику INSTEAD OF триггеров. В триггере AFTER INSERT невозможно присвоить значение переменной NEW.XXX. Это баг, поэтому плохо.
это чушь. after-триггеры это всегда ПОСТ-триггеры. где что для таблиц что для view можно менять данные ДРУГИХ таблиц, но никак не той же самой таблицы. Раньше new в after допускалось, но НИ К ЧЕМУ не приводило. Теперь запрещено, и это правильно. -- Dmitri Kouzmenko, www.ibase.ru, (495) 953-13-34

