вопрос про триггеры в СУБД
4) 2, тоесть новому значению - имхо самое логичное
В ДБ2 какой-то при создании триггера можно было отдельно указать условие типа NewRow.col1 <> OldRow.col1 и типа если оно 0 то триггер не дергался
Лично я думаю, что описал правильный вариант.
В DB2 прямо в определении триггера можно написать, на изменение каких столбцов он должен реагировать (UPDATE OF column-names и тогда если триггер сработал, значит поле изменилось.
CREATE TRIGGER TR_change_managers
BEFORE UPDATE OF DepartmentHeadID
ON Departments
REFERENCING OLD AS old_dept NEW AS new_dept
FOR EACH ROW
BEGIN
UPDATE Employees
SET Employees.ManagerID=new_dept.DepartmentHeadID
WHERE Employees.DepartmentID=old_dept.DepartmentID
END;
NewRow.col1 <> OldRow.col1а если поле обновляется, но значение не поменялось?
по-моему нельзя узнать, а зачем это нужно?
а если поле обновляется, но значение не поменялось?
по-моему нельзя узнать, а зачем это нужно?
че-то я тебе недопонял...
ты хочешь узнать именно какие колонки были указаны в update'е ? если да, то нафига?
как в триггере узнать апдейтиться поле col2 сейчас или нет?IF UPDATING('COL2') THEN
IF UPDATING('COL2') THENспасибки
так и сделал
если да, то нафига?потому что мне надо знать именно когда обновлялась колонка
например: я хочу это в лог автоматом записать
я конечно могу навесить на каждую колонку свой триггер, но мне хочутся иметь именно один
IF UPDATING('COL2') THEN
как раз то что нужно
а в других СУБД есть такое, или это примочка оракловская?
Ты говоришь про СУБД, а пишешь в терминах Oracle.не понял
что конкретно я написал в терминах оракла?
говорю про СУБД, потому что мне интересно как это в различных устроено
:Оld.col1 будет равно 1Вот эти :new и :оld - это оракловые примочки.
:Оld.col2 будет равно 2
:New.col1 будет равно 3
З.Ы. - видимо тезки.
отличие от DB2 только в двоеточии
в MSSQL вообще нет триггеров уровня строки, вроде
Оставить комментарий
pitrik2
имеется табличка с двумя полями: col1, col2там одна запись: (1, 2)
делается апдейт таблицы
UPDATE tab1 SET col1 = 3;
в триггере BEFORE UPDATE
:Оld.col1 будет равно 1
:Оld.col2 будет равно 2
:New.col1 будет равно 3
а чему будет равно :New.col2 ?
варианта я так понимаю три
1) 2, тоесть старому значению
2) NULL
3) при обращении к этому полю будет вылетать эксепшн
если первый или второй вариант, то возникает другой вопрос: как в триггере узнать апдейтиться поле col2 сейчас или нет?