Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 存储过程中的语法错误_Mysql_Sql_Codeigniter_Stored Procedures - Fatal编程技术网

Mysql 存储过程中的语法错误

Mysql 存储过程中的语法错误,mysql,sql,codeigniter,stored-procedures,Mysql,Sql,Codeigniter,Stored Procedures,第2行出现错误1064(42000):SQL语法有错误; 检查与MySQL服务器版本对应的手册,了解 使用near'设置自动提交=0的正确语法; 启动交易; 在第3行选择“客户\用户\ id” 嗨,朋友们, 如何更正它“分隔符;;”无效 使用:DELIMITER New\u DELIMITER Old\u DELIMITER\u To\u Finish\u行 两个分隔符必须不同 在过程的代码中,使用旧的分隔符,但以新代码结束; 恢复旧的分隔符 DELIMITER ;; CREATE PROCE

第2行出现错误1064(42000):SQL语法有错误; 检查与MySQL服务器版本对应的手册,了解 使用near'设置自动提交=0的正确语法; 启动交易; 在第3行选择“客户\用户\ id”

嗨,朋友们, 如何更正它

“分隔符;;”无效

使用:
DELIMITER New\u DELIMITER Old\u DELIMITER\u To\u Finish\u行

两个分隔符必须不同

在过程的代码中,使用旧的分隔符,但以新代码结束; 恢复旧的分隔符

DELIMITER ;;
CREATE  PROCEDURE `CANCEL_ORDER`(IN order_id INT, IN buyer_user_id INT)
BEGIN
    SET autocommit=0;
    START TRANSACTION;
    SELECT customer_user_id INTO @userid FROM orders WHERE id=order_id;
    IF @userid=buyer_user_id THEN
        UPDATE orders SET status='failed',canceled_at=UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) WHERE id=order_id;
        COMMIT;
    ELSE
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Error: Customer ID in orders does not match with given buyer_user_id', MYSQL_ERRNO = 1003;
        ROLLBACK;
    END IF;
END;;
DELIMITER ;
操作如下:tokenisateur将使用当前分隔符
提取第一个查询
分隔符变为
$
tokenisateur将使用当前分隔符
$
提取第二个查询,并忽略旧的分隔符
因此存储过程的不同行不会被分开

然后,tokenisateur将使用仍然活动的分隔符
$
分隔符提取第三个请求,并成为; 这意味着完成最后一个命令必须是一个

其他事项:

  • 启动事务自动更改
    自动提交

  • @userid
    是 未定义

  • cancelled\u at=UNIX\u时间戳(CURRENT\u TIMESTAMP())
    :如果该字段是时间戳,则完全无用。时间戳字段将自动更新

“分隔符;;”无效

使用:
DELIMITER New\u DELIMITER Old\u DELIMITER\u To\u Finish\u行

两个分隔符必须不同

在过程的代码中,使用旧的分隔符,但以新代码结束; 恢复旧的分隔符

DELIMITER ;;
CREATE  PROCEDURE `CANCEL_ORDER`(IN order_id INT, IN buyer_user_id INT)
BEGIN
    SET autocommit=0;
    START TRANSACTION;
    SELECT customer_user_id INTO @userid FROM orders WHERE id=order_id;
    IF @userid=buyer_user_id THEN
        UPDATE orders SET status='failed',canceled_at=UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) WHERE id=order_id;
        COMMIT;
    ELSE
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Error: Customer ID in orders does not match with given buyer_user_id', MYSQL_ERRNO = 1003;
        ROLLBACK;
    END IF;
END;;
DELIMITER ;
操作如下:tokenisateur将使用当前分隔符
提取第一个查询
分隔符变为
$
tokenisateur将使用当前分隔符
$
提取第二个查询,并忽略旧的分隔符
因此存储过程的不同行不会被分开

然后,tokenisateur将使用仍然活动的分隔符
$
分隔符提取第三个请求,并成为; 这意味着完成最后一个命令必须是一个

其他事项:

  • 启动事务自动更改
    自动提交

  • @userid
    是 未定义

  • cancelled\u at=UNIX\u时间戳(CURRENT\u TIMESTAMP())
    :如果该字段是时间戳,则完全无用。时间戳字段将自动更新


您可以使用以下方法:

DELIMITER $;
CREATE  PROCEDURE `CANCEL_ORDER`(IN order_id INT, IN buyer_user_id INT)
BEGIN
    SET autocommit=0;
    START TRANSACTION;
    SELECT customer_user_id INTO @userid FROM orders WHERE id=order_id;
    IF @userid=buyer_user_id THEN
        UPDATE orders SET status='failed',canceled_at=UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) WHERE id=order_id;
        COMMIT;
    ELSE
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Error: Customer ID in orders does not match with given buyer_user_id', MYSQL_ERRNO = 1003;
        ROLLBACK;
    END IF;
END;$
DELIMITER ; $

可以使用以下方法执行此操作:

DELIMITER $;
CREATE  PROCEDURE `CANCEL_ORDER`(IN order_id INT, IN buyer_user_id INT)
BEGIN
    SET autocommit=0;
    START TRANSACTION;
    SELECT customer_user_id INTO @userid FROM orders WHERE id=order_id;
    IF @userid=buyer_user_id THEN
        UPDATE orders SET status='failed',canceled_at=UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) WHERE id=order_id;
        COMMIT;
    ELSE
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Error: Customer ID in orders does not match with given buyer_user_id', MYSQL_ERRNO = 1003;
        ROLLBACK;
    END IF;
END;$
DELIMITER ; $

您好,先生,谢谢您的帮助,它出错了,但是我在另一个程序中遇到了同样的问题,请帮我解决这个问题您好,先生,谢谢您的帮助,它出错了,但是我在另一个程序中遇到了同样的问题,请帮我解决这个问题