简体   繁体   English

MySQL尝试捕获存储过程-SQL语法错误1064

[英]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()BEGINSTART 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 ;

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM