powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос (глупый;) по триггеру
3 сообщений из 3, страница 1 из 1
Вопрос (глупый;) по триггеру
    #33051417
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

Есть view, состоящая из нескольких таблиц таким образом, что сделать update на половину ее полей невозможно(в качестве некоторых полей там идут вложенные селекты).
Чтобы программист, работающий с базой не парился с моей процедурой с кучей параметров, хочу сделать trigger на update этой вьюшки(на апдейт в общем, без указания столбцов), чтобы на этот view можно было выполнять update, но возник вопрос:
А как определить, какой столбец меняется запросом, а какой - нет?
update vw set f1=something - это одно,
а update vw set f5=something, f6=something, f7=something - это другое.

Так как определить, какие столбцы затрагиваются update-ом, а какие - нет? Чтобы не лопатить каждый раз все поля. ct1sqna смотрел, ответа на свой вопрос не нашел.
...
Рейтинг: 0 / 0
Вопрос (глупый;) по триггеру
    #33051611
Julian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
falcon111
Есть view, состоящая из нескольких таблиц таким образом, что сделать update на половину ее полей невозможно(в качестве некоторых полей там идут вложенные селекты).
Чтобы программист, работающий с базой не парился с моей процедурой с кучей параметров, хочу сделать trigger на update этой вьюшки(на апдейт в общем, без указания столбцов), чтобы на этот view можно было выполнять update, но возник вопрос:
А как определить, какой столбец меняется запросом, а какой - нет?
update vw set f1=something - это одно,
а update vw set f5=something, f6=something, f7=something - это другое.

Так как определить, какие столбцы затрагиваются update-ом, а какие - нет? Чтобы не лопатить каждый раз все поля. ct1sqna смотрел, ответа на свой вопрос не нашел.

1) триггер на view не создается, только на таблицу, насколько я знаю (может, давно отстал? :)
2) "не лопатить все поля" - вероятно, имеется ввиду не выполнять лишние изменения? Но если триггер "на апдейт в общем", без указания столбцов, то он (триггер) будет вызываться на update set с любым набором полей, т.е. всегда.
А уж что там менять в БД, а что не менять, Informix решит сам.
3) внутри триггера понять, меняется ли то или иное поле, просто, например:
when ( deleted.q_select <> inserted.q_select or deleted.q_ship <> inserted.q_ship
or ...)
( execute procedure Injunc_Assort_tU2(
deleted.q_select, inserted.q_select,
deleted.q_ship, inserted.q_ship, ...
) )
...
Рейтинг: 0 / 0
Вопрос (глупый;) по триггеру
    #33051658
falcon111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Julian falcon111
Есть view, состоящая из нескольких таблиц таким образом, что сделать update на половину ее полей невозможно(в качестве некоторых полей там идут вложенные селекты).
Чтобы программист, работающий с базой не парился с моей процедурой с кучей параметров, хочу сделать trigger на update этой вьюшки(на апдейт в общем, без указания столбцов), чтобы на этот view можно было выполнять update, но возник вопрос:
А как определить, какой столбец меняется запросом, а какой - нет?
update vw set f1=something - это одно,
а update vw set f5=something, f6=something, f7=something - это другое.

Так как определить, какие столбцы затрагиваются update-ом, а какие - нет? Чтобы не лопатить каждый раз все поля. ct1sqna смотрел, ответа на свой вопрос не нашел.

1) триггер на view не создается, только на таблицу, насколько я знаю (может, давно отстал? :)

Отстал, отстал. :)
Создаются и на то, и на то. При этом на таблицы выполняется и действие, вызвавшее сработку триггера и сам триггер, а на view-шки только триггер.
Julian
2) "не лопатить все поля" - вероятно, имеется ввиду не выполнять лишние изменения? Но если триггер "на апдейт в общем", без указания столбцов, то он (триггер) будет вызываться на update set с любым набором полей, т.е. всегда.

Именно этого я и добиваюсь - потому что в триггере, помимо доделки того, что нужно обновить update-ом, самое главное - проверяются условия, на основании которых принимается решение, может ли этот конкретный пользователь вообще менять эту конкретную запись. Поэтому триггер и должен вызываться для любого update.
Julian
А уж что там менять в БД, а что не менять, Informix решит сам.
3) внутри триггера понять, меняется ли то или иное поле, просто, например:
when ( deleted.q_select <> inserted.q_select or deleted.q_ship <> inserted.q_ship
or ...)
( execute procedure Injunc_Assort_tU2(
deleted.q_select, inserted.q_select,
deleted.q_ship, inserted.q_ship, ...
) )
Ага, а чтобы дать мне сравнить old.cloumn<>new.column сервер будет выполнять все вложенные запросы, описанные в этом view? А таких колонок там много. Вот как раз этого я и хочу избежать.
В самом начале была мысль делать триггер на каждое поле, но тогда будет большой оверхед на проверку полномочий для конкретных запись-юзер для каждого столбца, поэтому этот вариант тоже не устраивает.

Так что вопрос остается открытым...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос (глупый;) по триггеру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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