【问题标题】:MySQL Try-Catch Stored Procedure - SQL Syntax Error 1064MySQL Try-Catch 存储过程 - SQL 语法错误 1064
【发布时间】:2015-01-13 14:55:07
【问题描述】:

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

但是,我每次运行它时都会得到以下错误

Error #1064 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本以获得正确的语法 在'附近使用'

DELIMITER $$
DROP PROCEDURE IF EXISTS `SQL_TRY_CATCH` $$

CREATE PROCEDUR

' 在第 1 行

有人可以指出我做错了什么的正确方向吗?

谢谢。

【问题讨论】:

  • 您的脚本中有太多分号?尝试在 SQL_TRY_CATCH() 和 BEGIN START TRANSACTION 之后删除分号
  • 去掉BEGIN后的分号
  • @Piyush 我删除了分号,但我仍然得到同样的错误。也许有太多的空白?
  • @Daniel:- 尝试修改答案
  • @Piyush 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'DELIMITER $$ DROP FUNCTION IF EXISTS 'SQL_TRY_CATCH'; CREATE FUNCTION 'SQL' at line 1 附近使用的正确语法

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


【解决方案1】:

您的脚本中有太多分号?尝试在 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 ;

更新

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 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2018-06-21
    相关资源
    最近更新 更多