Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / триггер вызывает триггер / 13 сообщений из 13, страница 1 из 1
12.08.2010, 14:20
    #36788399
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
ASE 15.

Есть триггер на insert, в нем вызывается update той же таблицы. Но при update, вызывается триггер на update. А это не есть хорошо.

Можно ли этого как-то избежать? allow nested triggers запрещает это на всем сервере. Т.е. это не подходит! С @@nestlevel, тоже не катит. Неизвестно кто сделает операцию изменения, процедура или просто update. set self_recursion off запрещает вызов только того же триггера.

Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер?
...
Рейтинг: 0 / 0
12.08.2010, 14:55
    #36788511
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
cherrex_Den wrote:

> Есть триггер на insert, в нем вызывается update той же таблицы. Но при
> update, вызывается триггер на update. А это не есть хорошо.
>
> Можно ли этого как-то избежать? allow nested triggers запрещает это на

Ну, не работаю с триггерами, ни на хрен они не нужны никому,
но, может быть, как бредовая идея, заменить UPDATE на DELETE + INSERT ?
UPDATE - триггер точно не будет вызываться
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.08.2010, 16:35
    #36788952
M0us
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
cherrex_DenASE 15.
Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер?

Просто сравните по PrimaryKey Value. значение при trigger insert и trigger update будут одинаковые))
...
Рейтинг: 0 / 0
12.08.2010, 16:44
    #36789001
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
M0us,

Вы имеете ввиду сравнить в триггере на update значения в псевдо-таблицах inserted и deleted?
...
Рейтинг: 0 / 0
12.08.2010, 17:13
    #36789118
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
M0us wrote:
> Может можно как-то узнать в тригере на update, кто его вызвал?

Нельзя, на то он и триггер.

> Просто сравните по PrimaryKey Value. значение при trigger insert и
> trigger update будут одинаковые))

Не это имеется в виду, не то, что вызвало триггер, UPDATE или INSERT,
А КАКОЙ UPDATE. Откуда вызванный. Нет, таких средств нет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.08.2010, 00:43
    #36789750
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
cherrex_DenASE 15.
Есть триггер на insert, в нем вызывается update той же таблицы. Но при update, вызывается триггер на update. А это не есть хорошо.

А почему вы решили, что это плохо?
...
Рейтинг: 0 / 0
13.08.2010, 08:46
    #36789867
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
Sergey Orlov,

Та нет! Конечно, это не плохо!!! Но так нужно сделать по нашей доморощенной логике.
Я б конечно завернул это все бы в процедуры добавления и изменения, но это же через несколько месяцев может забыться. И кто-нибудь из моих коллег или даже я, обратимся к этой таблице не через процедуру, а через стэйтмент(insert,update). Особенно когда на трубке висит нервный юзер или за спиной стоит злой начальник, боюсь что это как-то может не вспомниться.
...
Рейтинг: 0 / 0
13.08.2010, 09:09
    #36789892
sn1251
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
cherrex_Den
Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер?
В ASE12 была переменная @@procid, в 15 не знаю
...
Рейтинг: 0 / 0
13.08.2010, 20:15
    #36791569
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
cherrex_Den..., но это же через несколько месяцев может забыться. И кто-нибудь из моих коллег или даже я, обратимся к этой таблице не через процедуру, а через стэйтмент(insert,update). Особенно когда на трубке висит нервный юзер или за спиной стоит злой начальник, боюсь что это как-то может не вспомниться.

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

А вообще идеология триггера как раз такова, что он абстрагирован от предыстории и причин своего вызова. Срабатывает по факту, есть факт - есть вызов.
...
Рейтинг: 0 / 0
17.08.2010, 11:40
    #36795047
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
iLLer wrote:

> Чтобы такого не происходило, можно разделить действия не на уровне
> статмент/процедура-обертка, а на уровне текущего пользователя например.
> Т.е. завести какого-нить юзера special_user, а в триггере смотреть, если
> изменения идут от special_user, то все нормально, если от другого
> пользователя, то инициировать ошибку из триггера. Тогда сам случайно
> ничего не отредактируешь. Ну или пермишенами отрулить. Тогда изменения
> через процедуру пройдут, а прямые - нет.

Хе, а как будут пользователи переключаться ? Setuset ?
Так права sso нужно ... не думаю, что это подойдёт.

> А вообще идеология триггера как раз такова, что он абстрагирован от
> предыстории и причин своего вызова. Срабатывает по факту, есть факт -
> есть вызов.

Это и понятно. Это и есть главный плюс и главный минус триггеров.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
31.08.2010, 16:34
    #36821676
триггер вызывает триггер
Задачу можно перефразировать так:
Надо чтобы триггеры в зависимости от некоторых условий работали по-разному

Я для этого завел семафорную табличку и по-необходимости проверяю наличие
в ней некой ключевой записи.
...
Рейтинг: 0 / 0
31.08.2010, 16:39
    #36821693
триггер вызывает триггер
Гриценко А.В.Задачу можно перефразировать так:
Надо чтобы триггеры в зависимости от некоторых условий работали по-разному

Я для этого завел семафорную табличку и по-необходимости проверяю наличие
в ней некой ключевой записи.

Если семафор определенного типа взведен - значит так работаем - если нет значит эдак

Для ASA это совсем просто - там есть global temporary table которые изолируют данные на коннект и транзакцию - ничего мудрить не надо

для ASE как я понимаю дело хуже но решаемо - надо в этой табличке хранить ид коннекта проверять его в триггере и чистить таблу по-необходимости
...
Рейтинг: 0 / 0
02.09.2010, 20:34
    #36826857
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
триггер вызывает триггер
Совершенно случайно наткнулся на это .

Великий Роб показывает, как разрешить редактирование таблицы только определенной процедуре.
Пораскинув мозгами, можно также и определить, что вызвало срабатывание триггера, процедура или update.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / триггер вызывает триггер / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]