|
|
|
Вопрос (глупый;) по триггеру
|
|||
|---|---|---|---|
|
#18+
Привет! Есть view, состоящая из нескольких таблиц таким образом, что сделать update на половину ее полей невозможно(в качестве некоторых полей там идут вложенные селекты). Чтобы программист, работающий с базой не парился с моей процедурой с кучей параметров, хочу сделать trigger на update этой вьюшки(на апдейт в общем, без указания столбцов), чтобы на этот view можно было выполнять update, но возник вопрос: А как определить, какой столбец меняется запросом, а какой - нет? update vw set f1=something - это одно, а update vw set f5=something, f6=something, f7=something - это другое. Так как определить, какие столбцы затрагиваются update-ом, а какие - нет? Чтобы не лопатить каждый раз все поля. ct1sqna смотрел, ответа на свой вопрос не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 18:37 |
|
||
|
Вопрос (глупый;) по триггеру
|
|||
|---|---|---|---|
|
#18+
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, ... ) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 21:24 |
|
||
|
Вопрос (глупый;) по триггеру
|
|||
|---|---|---|---|
|
#18+
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? А таких колонок там много. Вот как раз этого я и хочу избежать. В самом начале была мысль делать триггер на каждое поле, но тогда будет большой оверхед на проверку полномочий для конкретных запись-юзер для каждого столбца, поэтому этот вариант тоже не устраивает. Так что вопрос остается открытым... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 22:14 |
|
||
|
|

start [/forum/topic.php?fid=44&gotonew=1&tid=1609044]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 379ms |

| 0 / 0 |
