MySQL триггер не идентифицирует NEW.entity в последующих запросах? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть триггер, настроенный для таблицы 'purchase_invoice', который должен добавить соответствующую транзакцию запаса для позиции счета в таблице 'purchase_stock' и обновить ее единицы запаса в таблице 'stock':

CREATE TRIGGER addStock AFTER INSERT ON purchase_invoice
FOR EACH ROW

    INSERT INTO 
    purchase_stock
    (
       purchase_invoice_id,
       item_id,
       units,
       ...
    )
    VALUES
    (
       NEW.id,
       NEW.item_id,
       NEW.units
       ...
    );

    UPDATE 
       stock 
    SET 
       units = units + NEW.units 
    WHERE 
       item_id = NEW.item_id;
...

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

Unknown column 'NEW.units'   in field list
Unknown column 'NEW.item_id' in 'where clause' 

1 Ответ

0 голосов
/ 31 мая 2018

После FOR EACH ROW нет BEGIN, поэтому mysql интерпретирует, что триггер определен только с одним оператором вставки, и рассматривает оператор обновления отдельно.Вот почему вы получаете сообщение об ошибке.Очевидно, вам также не хватает соответствующего END.

Правильный код будет выглядеть примерно так:

DELIMITER \\
CREATE TRIGGER addStock AFTER INSERT ON purchase_invoice
FOR EACH ROW
BEGIN
    INSERT INTO 
    purchase_stock
    (
       purchase_invoice_id,
       item_id,
       units,
       ...
    )
    VALUES
    (
       NEW.id,
       NEW.item_id,
       NEW.units
       ...
    );
    UPDATE 
       stock 
    SET 
       units = units + NEW.units 
    WHERE 
       item_id = NEW.item_id;
    ...
END\\

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...