Как исправить синтаксис процедуры MySQL с переменными? - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть следующая часть процедуры, которую я не могу сохранить, потому что ошибка синтаксиса Mysql:

    BEGIN
    DECLARE v_user_id INT;
    DECLARE v_order_id INT;
    DECLARE v_min_price INT;

    UPDATE ordersperformers SET ordersperformers.Status = 1
    WHERE EXISTS (

    SELECT 
    MIN(ordersperformers.DeliveryPrice + ordersperformers.Price),    ordersperformers.Users_Id,
ordersperformers.Orders_Id
INTO v_min_price, v_user_id, v_order_id
   FROM ordersperformers 

    INNER JOIN
    orders ON orders.Id = ordersperformers.Orders_Id WHERE
    NOW() >= DATE_SUB(orders.DeliveryDate, INTERVAL 2 HOUR) AND orders.Status = 0 AND ordersperformers.Status = 0
    ) AND ordersperformers.Orders_Id = v_order_id AND ordersperformers.Users_Id = v_user_id;

    END

Это говорит о том, что проблема около INTO:

enter image description here

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Считая предлагаемое решение, запрос можно упростить с помощью предложения JOIN и сократить WHERE условие:

UPDATE ordersperformers op 
INNER JOIN orders o ON op.Orders_Id = o.Id 

SET op.Status = 1

WHERE DATE_SUB(o.DeliveryDate, INTERVAL 2 HOUR) <= NOW() 
  AND o.Status = 0 AND op.Status = 0
0 голосов
/ 09 декабря 2018

Я проверил несколько способов и нашел работающий синтаксис, который исправил мою проблему:

BEGIN
DECLARE v_user_id INT DEFAULT 0;
DECLARE v_order_id INT DEFAULT 0;
DECLARE v_min_price INT DEFAULT 0;

UPDATE ordersperformers SET ordersperformers.Status = 1
WHERE EXISTS (
SELECT 
MIN(ordersperformers.DeliveryPrice + ordersperformers.Price) = @v_min_price,    ordersperformers.Users_Id = @v_user_id,
ordersperformers.Orders_Id = @v_order_id
FROM ordersperformers 
INNER JOIN
orders ON orders.Id = ordersperformers.Orders_Id WHERE
NOW() >= DATE_SUB(orders.DeliveryDate, INTERVAL 2 HOUR) AND orders.Status = 0 AND ordersperformers.Status = 0
) AND ordersperformers.Orders_Id = v_order_id AND ordersperformers.Users_Id = v_user_id;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...