2013-06-03 5 views
0

Я пытаюсь создать триггер на таблице после вставки, который собирается обновить другую таблицу.Создание триггера в mysql

это код, который я попробовал:

delimiter | 
CREATE TRIGGER augmenter_quantite_article AFTER INSERT 
ON LigneInterventaire 
FOR EACH ROW BEGIN 
DECLARE @qte AS INTEGER; 
DECLARE @code AS INTEGER; 
SELECT @qte = qteInv FROM INSERTED; 
SELECT @code = codeArt FROM INSERTED; 
UPDATE Article SET qteArt = qteArt + @qte WHERE codeArt = @code; 
END; 

| 

delimiter ; 

, но я получаю сообщение об ошибке:

1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте, что соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с '@qte AS INTEGER; DECLARE @code AS INTEGER; SELECT @qte = qteInv FROM INSERTED; S»в строке 4

+0

Я думаю, вам нужно ВЫБРАТЬ ** INTO ** в хранимых процедурах или триггерах. Вы не можете просто выбрать висячие отдельно. Кроме того, дважды проверьте, нужно ли использовать ': =' вместо '=' – Sebas

ответ

1

Попробуйте

CREATE TRIGGER augmenter_quantite_article 
AFTER INSERT ON LigneInterventaire 
FOR EACH ROW 
    UPDATE Article 
    SET qteArt = qteArt + NEW.qteInv 
    WHERE codeArt = NEW.codeArt; 

Вот SQLFiddle демо.

MySql имеет несколько ограниченную реализацию триггера. Нет виртуальных таблиц inserted и deleted как таковых, как в SQL Server. Вместо этого вы можете получить доступ к старым и новым значениям строки, которая вставляется или обновляется с ключевыми словами OLD и NEW соответственно.

Поскольку это сводилось только к одному заявлению UPDATE, вам больше не нужно использовать BEGIN END блок. Еще один плюс - вам не нужны изменения DELIMITER либо;)

+0

Что означает 'New'? –

+0

Это аналог для 'вставленных', но только для одной строки, которая вставляется. Вот почему он читает «ДЛЯ КАЖДОГО РУКА ...» – peterm

+0

Okey очень благодарен :) –

Смежные вопросы