Чи коректний тригер?

а чи коректно в тригері на апдейт (After update) на таблицю Table1 робити апдейт цієї ж таблиці Table1?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

2 Артур Пирожков

За такой триггер надо дать по рукам.

Чому? Доволі часто виникає потреба. Чи мається на увазі

UPDATE для поля PASSWORD_HASH для тригера на поле PLAIN_PASSWORD

Тоді звичайно.
А наприклад, анулювати пов’язані документи при ануляції основного — зручно.
Можна, звичайно і на клієнті робити, що не завжди єсть хорошо.
Тільки в ОРАКЛі це не так трохи робиться, не одним тригером,
там дійсно буде помилка «мутейтінга тейбла» («нескінченна рекурсія»)
(якщо не автономну транзакцію проводиш)
Три триггери треба використовувати
* A before trigger to set the package state to a known, consistent state
* An after, row level trigger to capture each rows changes
* An after trigger to actually process the change.
Пошукай по «Avoiding Mutating Tables»

2 silverwolf: «триггер» — рос. «тригер» — укр.

2., а хіба тригер чіпляється не на таблицю загалом, а ще й на якийсь із стовпців?

Я написал до того как вы сказали, БД в Oracle это возможно:
CREATE OR REPLACE TRIGGER...... UPDATE OF Sal, Comm ON Emp_tab...
BEGIN
download.oracle.com/...9306_01/appdev 102/b14251/adfns_triggers.htm

по теме MS SQL:

Recursive Triggers
SQL Server also allows recursive invocation of triggers when the recursive triggers setting is enabled in sp_dboption.
Recursive triggers allow two types of recursion to occur:
Indirect recursion
Direct recursion
With indirect recursion, an application updates table T1, which fires trigger TR1, updating table T2. In this scenario, trigger T2 then fires and updates table T1.
With direct recursion, the application updates table T1, which fires trigger TR1, updating table T1. Because table T1 was updated, trigger TR1 fires again, and so on.
This example uses both indirect and direct trigger recursion. Assume that two update triggers, TR1 and TR2, are defined on table T1. Trigger TR1 updates table T1 recursively. An UPDATE statement executes each TR1 and TR2 one time. In addition, the execution of TR1 triggers the execution of TR1 (recursively) and TR2. The inserted and deleted tables for a given trigger contain rows corresponding only to the UPDATE statement that invoked the trigger.
Note The above behavior occurs only if the recursive triggers setting of sp_dboption is enabled. There is no defined order in which multiple triggers defined for a given event are executed. Each trigger should be self-contained.
Disabling the recursive triggers setting only prevents direct recursions. To disable indirect recursion as well, set the nested triggers server option to 0 using sp_configure.

technet.microsoft.com/...ibrary/aa258254 (SQL.80).aspx

*йду почитаю теорію*
тригер в спрощеному вигляді має такий вигляд
CREATE trigger [dbo]. [UpdateTrigger]
on [dbo]. [Operation_data]
after update
as
begin
declare @value varchar (100)
select @value = value from inserted
update operation_data
set value = @value
where id = 1

end

2hihi-haha

Что вам мешает написать этот триггер (кстати, вроде таки 2 буквы «г» )? Когда выполните напишите сюда, реально интересно.

2 junior_dev
1.база — MS SQL 2005

2., а хіба тригер чіпляється не на таблицю загалом, а ще й на якийсь із стовпців?

Но по хорошему, рекомендуеться избегать тригеров и по возможности использовать хранимые процедуры — так проще дебажить, покрыть тестами, раздать права итд... то есть поддерживать и отвечать за такой код...

За такой триггер надо дать по рукам.

Напиши его сюда.

К примеру корректным может выглядеть UPDATE для поля PASSWORD_HASH для тригера на поле PLAIN_PASSWORD

все зависит от дизайна и business needs

не обязательно, у вас могут быть указаны разные колонки в апдейте и тригере, какой у вас тригер и какая БД?

2 junior_dev

не знаю, що являється критерієм коретності загалом:), але я під «коректністю» мав на увазі таке: чи не варто мені за такий тригер дати по руках?:)

2 Артур

ну я бачу, що може статися: по теорії повинна б виникнути нескінченна рекурсія, тому так робити не можна, але на практиці все працює:)

а что являеться критерием корректности?

А ты как считаешь, что может произойти?

Підписатись на коментарі