gpt4 book ai didi

mysql - 我可以在触发器(mySQL)中使用嵌套的 BEGIN/END block 吗

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

我想知道为什么我的代码不起作用。这个想法是验证当 idseq 添加到某个表时,查看相同的 idseq 是否已存在于任何其他表中。以下代码在 mySQL 中产生错误 1235:

delimiter //

CREATE TRIGGER trigger_pagina
BEFORE INSERT ON pagina
FOR EACH ROW
BEGIN
IF (EXISTS(
SELECT R.idseq
FROM registo R
WHERE (NEW.idseq = R.idseq)
) )THEN
CALL Ilegal_Insert();
END IF;
END;

BEGIN
IF (EXISTS(
SELECT T.idseq
FROM tipo_registo T
WHERE (NEW.idseq = T.idseq)
)) THEN
CALL Ilegal_Insert();
END IF;
END;

BEGIN
IF (EXISTS(
SELECT V.idseq
FROM valor V
WHERE (NEW.idseq = V.idseq)
)) THEN
CALL Ilegal_Insert();
END IF;
END;

BEGIN
IF (EXISTS(
SELECT C.idseq
FROM campo C
WHERE (NEW.idseq = C.idseq)
)) THEN
CALL Ilegal_Insert();
END IF;
END;//

delimiter ;

提前致谢!

最佳答案

您需要另一个最外层的 BEGIN ... END block 来包围上面的 block ,例如

delimiter //

CREATE TRIGGER trigger_pagina
BEFORE INSERT ON pagina
FOR EACH ROW
BEGIN -- Add a BEGIN here...
BEGIN
IF (EXISTS(
...
END IF;
END;
BEGIN
...
END;
END; -- and an END here
//
delimiter ;

这是因为CREATE TRIGGER实际上只允许触发器主体包含单个语句,并且BEGIN ... END被处理,及其内容,作为单个声明。

所以,是的,您可以(在本例中必须)在触发器主体中使用嵌套的 BEGIN ... END block 。

关于mysql - 我可以在触发器(mySQL)中使用嵌套的 BEGIN/END block 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34141926/

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