gpt4 book ai didi

mysql - 在存储过程中声明变量时出错?

转载 作者:行者123 更新时间:2023-11-29 06:11:44 24 4
gpt4 key购买 nike

我对 SQL 和存储过程有点陌生。我正在尝试设置一些变量以便稍后在事务中使用,同时还在异常上设置回滚变量,但我无法执行此操作。

我不知道错误在哪里,因为当我在 _rollback 之后切换 how_many 部分时,错误发生变化。

我在这里声明变量的方式有什么问题?

DELIMITER $$
DROP PROCEDURE IF EXISTS `do_thing` $$
CREATE PROCEDURE `do_thing`()
BEGIN
DECLARE how_many INT;
SELECT COUNT(*) FROM things INTO how_many;
-- Prepare roleback.
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
-- Start transaction.
START TRANSACTION;
-- Do all the things.
IF `_rollback` THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END $$
DELIMITER ;

编辑:

当我这样声明变量时:

    DECLARE how_many INT;
-- Prepare roleback.
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
SELECT COUNT(*) FROM tiers INTO how_many;

好像还不错。程序中的某些变量设置后是否不允许声明更多变量?

最佳答案

来自手册页 DECLARE Syntax :

DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements. Declarations must follow a certain order. Cursor declarations must appear before handler declarations. Variable and condition declarations must appear before cursor or handler declarations.

请注意,这些在 mysql 中称为局部变量。这些不同于用户变量(以 @ 符号为前缀),后者可以散布在您的语句中并且不需要 DECLARE。

关于mysql - 在存储过程中声明变量时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com