обработка ошибок транзакции mysql - PullRequest
5 голосов
/ 02 февраля 2012
 DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK; 
END;
START TRANSACTION;      

    UPDATE tbl_order SET TransactionID="abc" WHERE OrderID=1;
    UPDATE tbl_order SET TransactionID="xyz" WHERE OrderID=;
    UPDATE tbl_order SET TransactionID="zzz" WHERE OrderID=13;


COMMIT;

по какой-то причине ордера 1 и 13 заполнены без отката, и я получаю синтаксическую ошибку для обработчика выхода.

Query:  DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND 
BEGIN 
    ROLLBACK' at line 1

Может кто-нибудь помочь мне понять, что я делаю не так?

Заранее спасибо

EDIT

ОБНОВЛЕНИЕ tbl_order SET TransactionID = "xyz" ГДЕ OrderID =;

является преднамеренным

1 Ответ

0 голосов
/ 09 февраля 2012

Я считаю, что обработчики выхода могут использоваться только в хранимых процедурах. В документации явно не говорится об этом, но упоминается

При выполнении хранимой программы могут возникать условия, требующие специальной обработки

http://dev.mysql.com/doc/refman/5.1/en/condition-handling.html

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