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

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

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

Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер?
...
Рейтинг: 0 / 0
триггер вызывает триггер
    #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
триггер вызывает триггер
    #36788952
M0us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_DenASE 15.
Может можно как-то узнать в тригере на update, кто его вызвал? Процедура? Просто стэйтмент? Или другой триггер?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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