gpt4 book ai didi

mysql - 使用存储过程中的值更新触发器中的表

转载 作者:行者123 更新时间:2023-11-29 19:34:08 25 4
gpt4 key购买 nike

我想制作一个触发器,用过程的值更新表。我希望触发器做这样的事情:

DELIMITER $$
CREATE TRIGGER onInsertVillage AFTER INSERT ON Village
FOR EACH ROW
BEGIN
UPDATE Village V SET V.xCoordinaat = x, V.yCoordinaat = y FROM getVrijePlaatsInMap();
END$$
DELIMITER ;

但这不起作用..顺便说一下,该过程返回一个 x 和 y 值。有没有可能的方法让触发器完成它的工作?

最佳答案

我认为触发器应针对插入表Village中的每个新村庄调整xCoordinaatyCoordinat。如果是这种情况,我将使用 BEFORE INSERT 触发器,它可以访问要插入的相应村庄记录的值(在插入之前)。由于您的示例缺乏架构和存储过程代码,我编写了一个简化的程序来演示这种方法:

create table test (
a int,
b int,
c int
);


CREATE PROCEDURE simpleproc (IN a int, OUT b INT, OUT c int)
BEGIN
set b = a div 100;
set c = a % 100;
END;

CREATE TRIGGER test_before_insert
BEFORE INSERT
ON test FOR EACH ROW
BEGIN
call simpleproc (new.a,new.b,new.c);
END;

insert into test (a,b,c) values (120,0,0), (210,0,0), (303,0,0);

这会产生:

  a | b | c
----|---|---
120 | 1 | 20
210 | 2 | 10
303 | 3 | 3

让你的方法发挥作用可能会有点棘手;在 AFTER INSERT 触发器中,您可以访问 .NEW 值,但无法修改它们;因此,您必须对表进行更新,但您必须以某种方式识别刚刚插入的村庄。

关于mysql - 使用存储过程中的值更新触发器中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624559/

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