Использование DELETE LIMIT внутри TRIGGER - PullRequest
0 голосов
/ 10 апреля 2020

Как использовать DELETE INTO .... ORDER BY ... LIMTI внутри триггера? Вот то, что я пытаюсь

BEGIN
    IF NEW.qty > 0 THEN
        SET @QTY = 0;
        REPEAT
            INSERT stock_fifo(id, sku_id, slot_id, stock_at)
            VALUES(NEW.id, NEW.sku_id, NEW.slot_id, NEW.stock_at);
            SET @QTY = @QTY + 1;
        UNTIL @QTY > NEW.qty END REPEAT;
    ELSEIF NEW.qty < 0 THEN
        DELETE FROM stock_fifo
        WHERE slot_id = NEW.slot_id AND sku_id = NEW.sku_id
        ORDER BY id
        LIMIT -NEW.qty;
    END IF;
END

Он сказал, что есть ошибка около

LIMIT -NEW.qty

1 Ответ

2 голосов
/ 10 апреля 2020

LIMIT выражения должны быть «неотрицательными целочисленными константами» (см. руководство ), поэтому LIMIT -NEW.qty является синтаксической ошибкой. Вы можете l oop the DELETE точно так же, как вы l oop the INSERT:

SET @QTY = 0;
REPEAT
    DELETE FROM stock_fifo
    WHERE slot_id = NEW.slot_id AND sku_id = NEW.sku_id
    ORDER BY id
    LIMIT 1;
    SET @QTY = @QTY - 1;
UNTIL @QTY < NEW.qty END REPEAT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...