Я ищу, чтобы написать ANSI-совместимый SQL Trigger, и считаю, что я на 90% из того, что есть, но мне не хватает нескольких частей. У меня также есть некоторые вопросы/проблемы относительно его производительности (как в качестве оператора SQL, так и в качестве триггера).ANSI SQL Trigger on INSERT & UPDATE
У меня есть таблица под названием widgets
:
widgets
widget_id | widget_name | widget_type_id | widget_is_fizz
========================================================================
1 Apple 1 0
2 Kiwi 2 0
3 Pear 3 1
... ... ... ...
2634 Banana 28 0
мне нужен триггер, в любое время вставки или изменения происходят на этой таблице:
- пластини где
widget_type_id
составляет 17 иwidget_is_fizz
- 1 (true); или - Для получения обновлений (по той же причине, что и выше)
Когда «шипение виджет» с типом ID 17 вставлен или обновлен на этом столе, я хочу изменить его widget_name
на «НЕИЗВЕСТНЫЙ» ,
До сих пор моя лучшая попытка:
CREATE TRIGGER widget_name_trigger
ON
widgets
FOR
INSERT
AS
UPDATE
widgets
SET
widget_name = 'UNKNOWN'
WHERE
widget_type_id = 17
AND
widget_is_fizz = 1
До сих пор не может понять, как заставить его сделать то же самое для обновления, как это делает для вкладышей. Также не уверен, что он даже синтаксически корректен и соответствует ANSI.
Также, с точки зрения производительности, слухи гласят, что наш администратор базы данных ненавидит триггеры и, вероятно, столкнется с дракой, когда я возьму это перед собой для обзора кода. Триггеры изначально дорогие? Если да, то почему, и есть ли что-нибудь, что я могу сделать здесь, чтобы смягчить эту медлительность? Заранее спасибо.
Существует не такая штука, как триггер, совместимый с ANSI. Теоретически стандарт ANSI определяет «язык PSM» для кодирования таких вещей, но ни одна из основных СУБД не реализует его (некоторые из них ближе, чем другие). –
Я также хотел бы обратить внимание на то, что другие посетители считают, что связанная с DBA проблема, если таковая имеется, относительно триггеров, скорее всего, не что иное, как производительность. Обслуживание, например, может быстро стать сложным в среде с триггером (grin). – shannon