Mysql 存储过程中的语法错误
第2行出现错误1064(42000):SQL语法有错误; 检查与MySQL服务器版本对应的手册,了解 使用near'设置自动提交=0的正确语法; 启动交易; 在第3行选择“客户\用户\ id” 嗨,朋友们, 如何更正它“分隔符;;”无效 使用: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
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 ; $
您好,先生,谢谢您的帮助,它出错了,但是我在另一个程序中遇到了同样的问题,请帮我解决这个问题您好,先生,谢谢您的帮助,它出错了,但是我在另一个程序中遇到了同样的问题,请帮我解决这个问题