gpt4 book ai didi

mysql - 在 MySql 中创建触发器时声明变量

转载 作者:可可西里 更新时间:2023-11-01 08:33:34 26 4
gpt4 key购买 nike

我在创建触发器时遇到了一点问题,因为我必须声明一些变量,然后将其中一些变量设置为 0,这样它们就会开始循环增加它们的值,具体取决于条件。无论如何,我将粘贴代码及其抛出的错误,希望有人会告诉我我做错了什么。谢谢。

CREATE TRIGGER update_request AFTER UPDATE ON medical_tests
FOR EACH ROW
BEGIN
DECLARE y INT, x0 INT, x3 INT, counting INT
SET y=0, x0=0, x3=0,
counting = count(SELECT * FROM medical_tests WHERE medical_tests.request_id = UPDATED.request_id)

WHILE (y<counting)
BEGIN
SET y=y+1
IF (medical_tests.status=1)
BEGIN
SET x0=x0+1
END
ELSEIF (medical_tests.status=3)
BEGIN
SET x3=x3+1
END
END IF
END WHILE

IF (x0>0 AND x0<counting)
BEGIN
UPDATE requests SET status=2 WHERE requests.id=UPDATED.request_id
END
ELSEIF (x3=counting)
BEGIN
UPDATE requests SET status=3 WHERE requests.id=UPDATED.request_id
END
ENDIF
END

它抛出以下错误: #1064 - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在 'x0 INT, x3 INT, counting INT SET y=0, x0=0, x3=0, counting= count(SELECT * FROM m' at line 附近使用的正确语法3.

上次我在 MySQL 服务器上写了一个触发器,语法有点不同。也许我只需要创建一个过程并调用它。因此,如果有人可以提供帮助,我将不胜感激。

最佳答案

要事第一。要正确 declare MySQL中同类型同初值的变量发生变化

DECLARE y INT, x0 INT, x3 INT, counting INT

DECLARE y, x0, x3, counting INT DEFAULT 0;

这声明了四个 INT 类型的变量,默认值为 0

但这仅仅是个开始。您的代码还有其他几个问题:

  1. 您必须使用分号 ; 终止每个 语句,包括 IF ... END IF;WHILE ... END WHILE;
  2. 要引用正在更新的行的列,您必须使用 NEW 关键字而不是 UPDATED
  3. 您不需要将每个 SET 语句包装在 BEGIN...END block 中。它只会增加困惑。
  4. 您不能使用 (medical_tests.status=1) 在 while 循环中任意访问列值。如果您打算引用正在更新的行的 status 列,那么您需要再次使用特殊关键字 NEWOLD。如果您打算遍历其他一些结果集,那么您应该使用游标或在 SELECT 语句中执行此操作。

关于mysql - 在 MySql 中创建触发器时声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19885752/

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