MySQL Try-Catch存储过程 - SQL语法错误1064

时间:2015-01-13 14:55:08

标签: mysql sql stored-procedures mysql-error-1064

我正在尝试在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 ;

但是,每次运行时,我都会

  

错误#1064您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   在'

附近使用
DELIMITER $$
DROP PROCEDURE IF EXISTS `SQL_TRY_CATCH` $$

CREATE PROCEDUR
  

'在第1行

有人能指出我正在做错的方向吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你的脚本中有太多分号?尝试在SQL_TRY_CATCH()BEGIN以及START TRANSACTION之后删除分号,并为函数RETURNS VARCHARRETURNS 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 ;

<强>更新

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 ;