[英]syntax error in stored procedures
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 ;
第2行的错误1064(42000):您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以在'SET autocommit = 0附近使用正确的语法; 开始交易; 在第3行上选择customer_user_id INTO'
嗨FRDS,如何纠正它
“ DELIMITER ;;” 无效的
使用: DELIMITER New_delimiter Old_Delimiter_To_Finish_Line
两个定界符必须不同
在该过程的代码中,使用旧的定界符,但在新代码后完成; 恢复旧的分隔符
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将使用“仍然活动的定界符$
delimiter”提取第三个请求,并变为; 这意味着要完成最后一个命令必须是一个;
其他事情:
START TRANSACTION;
更改自动autocommit
@userid
未定义
canceled_at = UNIX_TIMESTAMP (CURRENT_TIMESTAMP ())
:如果该字段是TIMESTAMP,则完全没有用。 TIMESTAMP字段将自动更新。
您可以使用以下方法进行操作:
DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `cancel_order`$$
CREATE DEFINER=`root`@`%` PROCEDURE `cancel_order`(IN order_id INT, IN buyer_user_id INT)
BEGIN
DECLARE v_cancel BOOLEAN DEFAULT FALSE;
SET autocommit=0;
START TRANSACTION;
SELECT TRUE INTO v_cancel FROM orders WHERE id=order_id AND customer_user_id=buyer_user_id;
IF v_cancel THEN
UPDATE orders SET STATUS='failed',canceled_at=NOW() 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 ;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.