Mysql Создание хранимой процедуры с проблемой TRANSACTION - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно создать такую ​​процедуру, но я получаю ошибки, которые я решаю, просто удаляя BEGIN и END в других процедурах, но у этой операции есть TRANSACTION, и я не могу найти решение.


CREATE PROCEDURE sp_device_post_device_status (IN deviceID int(11), IN zone int(11), IN stat int(11)) 
BEGIN 
    START TRANSACTION
    UPDATE device_statuses
    SET is_last_one = 0
    WHERE id_device = deviceID
      AND is_last_one = 1
      AND zoneNo = zone;
   INSERT INTO device_statuses (id_device, zoneNo, status, is_last_one)
    VALUES (deviceID, zone, stat, 1);
    commit
END;

она возвращает :

SQL query: Copy


CREATE PROCEDURE sp_device_post_device_status (IN deviceID int(11), IN zone int(11), IN stat int(11)) 
BEGIN 
    START TRANSACTION
    UPDATE device_statuses
    SET is_last_one = 0
    WHERE id_device = deviceID
      AND is_last_one = 1
      AND zoneNo = zone
MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE device_statuses
    SET is_last_one = 0
    WHERE id_device = deviceID
' at line 4

1 Ответ

0 голосов
/ 30 марта 2020

я решил это следующим образом

РАЗДЕЛИТЕЛЬ $$ ПРОЦЕДУРА СОЗДАНИЯ sp_device_post_device_status (В устройстве с int (11), в зоне INT (11), в статистике int (11)) НАЧАЛО СТАРТОВОЙ СДЕЛКИ;

UPDATE device_statuses
SET is_last_one = 0
WHERE id_device = deviceID
  AND is_last_one = 1
  and zoneNo = zone;

insert into device_statuses (id_device, zoneNo, status, is_last_one)
VALUES (deviceID, zone, stat, 1);
commit;

end $$ DELIMITER;

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