2017-01-05 9 views
0

Мне интересно, можно ли создать триггер на представлении после вставки, который обновляет столбец в другой таблице? Ниже приведен пример того, что я написал.Как создать триггер в представлении, который обновляет столбец в отдельной таблице?

Просмотр Имя: VMC_FWD2

Название таблицы: TLORDER

CREATE OR REPLACE TRIGGER QA_TRACE_NUM_INSERT_OI 
AFTER INSERT ON VMC_FWD2 
REFERENCING NEW ROW AS N 
FOR EACH ROW 
MODE DB2SQL 
BEGIN ATOMIC 
update tlorder set user4 = n.status where bill_number = n.number; 
END 

Однако это приводит к ошибке:

[IBM][CLI Driver][DB2/NT64] SQL0156N The name used for this operation is not a table. LINE NUMBER=2. SQLSTATE=42809"

и немного больше исследований говорит, что вы не можете использовать стандартные триггеры взглядов и что есть обходное решение, просто не то, что оно есть.

+0

Неустойчивый нажать на спусковой крючок, или вы получаете сообщение об ошибке или он просто не работает? На основе http://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000931.html Я не понимаю, почему это не сработает , если пользователь, создающий обновление для представления, также имеет привилегии обновления для 'tlorder'. – xQbert

+0

Итак, что-то не так с примером, который вы написали? – mustaccio

+0

В нем говорится: «[IBM] [драйвер CLI] [DB2/NT64] SQL0156N Имя, используемое для этой операции, не является таблицей. LINE NUMBER = 2. SQLSTATE = 42809», и немного больше исследований говорит, что вы не можете использовать стандартные триггеры на Views и говорят, что есть работа вокруг, а не что это такое. – Landers

ответ

1

Просмотров поддерживают только INSTEAD OF триггеры, так что ваш будет выглядеть

CREATE OR REPLACE TRIGGER QA_TRACE_NUM_INSERT_OI 
INSTEAD OF INSERT ON VMC_FWD2 
... -- skipped other declaration lines 
BEGIN ATOMIC 
    update tlorder set user4 = n.status where bill_number = n.number; 
END 
+0

Я оставляю ... в строке 3? – Landers

+0

Нет, извините за путаницу. Я вставил многоточие вместо пропущенных допустимых строк, чтобы показать, что я изменил. В основном вам нужно заменить 'AFTER' на' INSTEAD OF' в тексте триггера, который в противном случае выглядит ОК. – mustaccio

+0

Я только что запустил это на нашем тестовом сервере, и он вставил отлично сейчас, я собираюсь протестировать его, но все кажется вам идеальным! – Landers