Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 создание триггера  [new]
Насонов Алексей
Member

Откуда:
Сообщений: 147
создаю триггер на обновление даты:

CREATE TRIGGER  upd_fuctional_tasks
NO CASCADE BEFORE
UPDATE ON functional_tasks
REFERENCING NEW AS nnn
FOR EACH ROW
MODE DB2SQL
SET  date_begin = 

	case when status_id = 0
		then CURRENT TIMESTAMP
            else date_begin
                    end       
;

когда делаю update :

update functional_tasks set status = 0 where id = 1;

меняются все записи.

как сделать, чтоб менялась только запись с id = 1 ?
17 апр 08, 16:22    [5562282]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
А на запрос на UPDATE можно взглянуть?
И еще, напишите пож-ста так:

SET  NNN.date_begin 
17 апр 08, 17:01    [5562679]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Насонов Алексей

когда делаю update :

update functional_tasks set status = 0 where id = 1;

меняются все записи.

как сделать, чтоб менялась только запись с id = 1 ?

Выглядит чудовищно, но наверняка это просто недоразумение. Не верю я в настолько жуткие баги в DB2.
17 апр 08, 19:40    [5563537]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
Насонов Алексей
Member

Откуда:
Сообщений: 147
стал разбираться:

при update всех строк меняются все строки с status_id = 0.

как поправить триггер, чтобы он срабатывал только на изменение поля status_id ?
18 апр 08, 09:21    [5564556]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Насонов Алексей
стал разбираться:

при update всех строк меняются все строки с status_id = 0.

Как написано, так и работает

как поправить триггер, чтобы он срабатывал только на изменение поля status_id ?

CREATE TRIGGER  upd_fuctional_tasks
NO CASCADE BEFORE
UPDATE ON functional_tasks
REFERENCING NEW AS nnn OLD AS ooo
FOR EACH ROW
MODE DB2SQL
SET  nnn.date_begin = 
	case when nnn.status_id <> ooo.status_id
		then CURRENT TIMESTAMP
            else date_begin
                    end;
или, понимая более буквально,
CREATE TRIGGER  upd_fuctional_tasks
NO CASCADE BEFORE
UPDATE ON functional_tasks
REFERENCING NEW AS nnn OLD AS ooo
FOR EACH ROW
MODE DB2SQL 
when (nnn.status_id <> ooo.status_id)
SET  nnn.date_begin = CURRENT TIMESTAMP;
18 апр 08, 09:38    [5564615]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
Насонов Алексей
стал разбираться:

при update всех строк меняются все строки с status_id = 0.

как поправить триггер, чтобы он срабатывал только на изменение поля status_id ?
CREATE TRIGGER upd_fuctional_tasks
NO CASCADE BEFORE
UPDATE of status_id ON functional_tasks
REFERENCING NEW AS nnn
FOR EACH ROW ...
18 апр 08, 10:09    [5564767]     Ответить | Цитировать Сообщить модератору
 Re: создание триггера  [new]
Насонов Алексей
Member

Откуда:
Сообщений: 147
спасибо, большое
18 апр 08, 10:15    [5564815]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить