Я не могу выполнить два оператора в моем триггере - PullRequest
0 голосов
/ 04 июня 2019

Я хочу, чтобы оба оператора выполнялись в моем триггере.Я не могу заставить работать следующее:

IF (flag = 'D') THEN
BEGIN
     INSERT INTO logs (id, author_id, action_done, description, old_value, new_value, create_date) 
     VALUES (null, (SELECT id FROM gallery WHERE flag = 'D'), 'Delete', 'Gallery', (SELECT filename FROM gallery WHERE flag = 'D'), '', NOW());
     DELETE FROM gallery WHERE flag = 'D';
END
END IF

Ответы [ 3 ]

0 голосов
/ 04 июня 2019

Ваш идентификатор должен автоматически увеличиваться и, следовательно, не должен быть одним из значений.

0 голосов
/ 04 июня 2019

Предположительно, ваш триггер находится на столе gallery.Если это так, ваш триггер должен быть триггером «до» или «после», и вы можете выполнить:

IF (flag = 'D') THEN
BEGIN
     INSERT INTO logs (author_id, action_done, description, old_value, new_value, create_date) 
         VALUES (old.id, 'Delete', 'Gallery', old.filename, '', NOW());    
END;
END IF

Нет необходимости повторять DELETE.

0 голосов
/ 04 июня 2019

Я предполагаю, что поле id в таблице журналов является первичным ключом и автоматически генерируется системой.

Попробуйте это:

IF (flag = 'D') THEN
BEGIN
     INSERT INTO logs (author_id, action_done, description, old_value, new_value, create_date) 
     select id, 'Delete', 'Gallery', filename, '', NOW() from gallery where flag='D'; 
     DELETE FROM gallery WHERE flag = 'D';
END
END IF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...