|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
ASE 15. Есть триггер на insert, в нем вызывается update той же таблицы. Но при update, вызывается триггер на update. А это не есть хорошо. Можно ли этого как-то избежать? allow nested triggers запрещает это на всем сервере. Т.е. это не подходит! С @@nestlevel, тоже не катит. Неизвестно кто сделает операцию изменения, процедура или просто update. set self_recursion off запрещает вызов только того же триггера. Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2010, 14:20 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
cherrex_Den wrote: > Есть триггер на insert, в нем вызывается update той же таблицы. Но при > update, вызывается триггер на update. А это не есть хорошо. > > Можно ли этого как-то избежать? allow nested triggers запрещает это на Ну, не работаю с триггерами, ни на хрен они не нужны никому, но, может быть, как бредовая идея, заменить UPDATE на DELETE + INSERT ? UPDATE - триггер точно не будет вызываться Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2010, 14:55 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
cherrex_DenASE 15. Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер? Просто сравните по PrimaryKey Value. значение при trigger insert и trigger update будут одинаковые)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2010, 16:35 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
M0us, Вы имеете ввиду сравнить в триггере на update значения в псевдо-таблицах inserted и deleted? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2010, 16:44 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
M0us wrote: > Может можно как-то узнать в тригере на update, кто его вызвал? Нельзя, на то он и триггер. > Просто сравните по PrimaryKey Value. значение при trigger insert и > trigger update будут одинаковые)) Не это имеется в виду, не то, что вызвало триггер, UPDATE или INSERT, А КАКОЙ UPDATE. Откуда вызванный. Нет, таких средств нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2010, 17:13 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
cherrex_DenASE 15. Есть триггер на insert, в нем вызывается update той же таблицы. Но при update, вызывается триггер на update. А это не есть хорошо. А почему вы решили, что это плохо? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2010, 00:43 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
Sergey Orlov, Та нет! Конечно, это не плохо!!! Но так нужно сделать по нашей доморощенной логике. Я б конечно завернул это все бы в процедуры добавления и изменения, но это же через несколько месяцев может забыться. И кто-нибудь из моих коллег или даже я, обратимся к этой таблице не через процедуру, а через стэйтмент(insert,update). Особенно когда на трубке висит нервный юзер или за спиной стоит злой начальник, боюсь что это как-то может не вспомниться. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2010, 08:46 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
cherrex_Den Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер? В ASE12 была переменная @@procid, в 15 не знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2010, 09:09 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
cherrex_Den..., но это же через несколько месяцев может забыться. И кто-нибудь из моих коллег или даже я, обратимся к этой таблице не через процедуру, а через стэйтмент(insert,update). Особенно когда на трубке висит нервный юзер или за спиной стоит злой начальник, боюсь что это как-то может не вспомниться. Чтобы такого не происходило, можно разделить действия не на уровне статмент/процедура-обертка, а на уровне текущего пользователя например. Т.е. завести какого-нить юзера special_user, а в триггере смотреть, если изменения идут от special_user, то все нормально, если от другого пользователя, то инициировать ошибку из триггера. Тогда сам случайно ничего не отредактируешь. Ну или пермишенами отрулить. Тогда изменения через процедуру пройдут, а прямые - нет. А вообще идеология триггера как раз такова, что он абстрагирован от предыстории и причин своего вызова. Срабатывает по факту, есть факт - есть вызов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2010, 20:15 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
iLLer wrote: > Чтобы такого не происходило, можно разделить действия не на уровне > статмент/процедура-обертка, а на уровне текущего пользователя например. > Т.е. завести какого-нить юзера special_user, а в триггере смотреть, если > изменения идут от special_user, то все нормально, если от другого > пользователя, то инициировать ошибку из триггера. Тогда сам случайно > ничего не отредактируешь. Ну или пермишенами отрулить. Тогда изменения > через процедуру пройдут, а прямые - нет. Хе, а как будут пользователи переключаться ? Setuset ? Так права sso нужно ... не думаю, что это подойдёт. > А вообще идеология триггера как раз такова, что он абстрагирован от > предыстории и причин своего вызова. Срабатывает по факту, есть факт - > есть вызов. Это и понятно. Это и есть главный плюс и главный минус триггеров. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2010, 11:40 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
Задачу можно перефразировать так: Надо чтобы триггеры в зависимости от некоторых условий работали по-разному Я для этого завел семафорную табличку и по-необходимости проверяю наличие в ней некой ключевой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2010, 16:34 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
Гриценко А.В.Задачу можно перефразировать так: Надо чтобы триггеры в зависимости от некоторых условий работали по-разному Я для этого завел семафорную табличку и по-необходимости проверяю наличие в ней некой ключевой записи. Если семафор определенного типа взведен - значит так работаем - если нет значит эдак Для ASA это совсем просто - там есть global temporary table которые изолируют данные на коннект и транзакцию - ничего мудрить не надо для ASE как я понимаю дело хуже но решаемо - надо в этой табличке хранить ид коннекта проверять его в триггере и чистить таблу по-необходимости ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2010, 16:39 |
|
триггер вызывает триггер
|
|||
---|---|---|---|
#18+
Совершенно случайно наткнулся на это . Великий Роб показывает, как разрешить редактирование таблицы только определенной процедуре. Пораскинув мозгами, можно также и определить, что вызвало срабатывание триггера, процедура или update. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2010, 20:34 |
|
|
start [/forum/topic.php?fid=55&msg=36795047&tid=2010547]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 321ms |
total: | 477ms |
0 / 0 |