[英]MySQL Try-Catch Stored Procedure - SQL Syntax Error 1064
I'm trying to create a try-catch type stored procedure in MySQL: 我正在尝试在MySQL中创建一个try-catch类型的存储过程 :
DELIMITER $$
DROP PROCEDURE IF EXISTS `SQL_TRY_CATCH` $$
CREATE PROCEDURE `SQL_TRY_CATCH`()
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
START TRANSACTION;
UPDATE `devices` SET
`cabinet` = '46',
`name` = 'Test Device',
`type` = 'Test Type',
`u_size` = '27',
`service_tag` = '35sdf35',
`port_1` = '10.10.1.1',
`drac` = '10.10.1.2',
`notes` = 'Notes 1',
`hd_info` = 'HD Info 2'
WHERE `id`='45';
IF `_rollback` THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END $$
DELIMITER ;
But, I get this error below every time I run it: 但是,每次运行它时,都会在下面收到此错误 :
Error # 1064 You have an error in your SQL syntax; 错误#1064您的SQL语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 请查看与您的MySQL服务器版本相对应的手册,以获取在'附近使用的正确语法
DELIMITER $$
DROP PROCEDURE IF EXISTS `SQL_TRY_CATCH` $$
CREATE PROCEDUR
' at line 1 '在第1行
Can someone point me in the right direction of what I'm doing wrong? 有人可以指出我做错事情的正确方向吗?
Thanks. 谢谢。
you have too many semicolon in your script? 您的脚本中有太多分号? Try removing semicolon after SQL_TRY_CATCH()
and BEGIN
and START TRANSACTION
and also add return type for function RETURNS VARCHAR
or RETURNS INT
or whatever you want 尝试在SQL_TRY_CATCH()
和BEGIN
和START TRANSACTION
之后删除分号,并为函数RETURNS VARCHAR
或RETURNS INT
或您想要的任何内容添加返回类型
DELIMITER $$
DROP FUNCTION IF EXISTS `SQL_TRY_CATCH`$$
CREATE FUNCTION `SQL_TRY_CATCH`() RETURNS INT
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
START TRANSACTION;
'.$sql.';
IF `_rollback` THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END$$
DELIMITER ;
UPDATE UPDATE
DELIMITER $$
DROP PROCEDURE IF EXISTS `SQL_TRY_CATCH`;$$
CREATE PROCEDURE `SQL_TRY_CATCH`()
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
START TRANSACTION;
UPDATE entities SET `slug`='servers' WHERE `slug`='devices';
IF `_rollback` THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END$$
DELIMITER ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.