我想创建一个触发器,用一个过程的值更新表。我希望触发器能做到这样的事情:
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值。是否有可能使触发器完成它的工作?
答案 0 :(得分:0)
我认为触发器应该为插入表xCoordinaat
的每个新村庄调整yCoordinat
和Village
。如果是这种情况,我会使用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
- 值,但无法修改它们;因此,您必须对表进行更新,但您必须以某种方式识别刚刚插入的村庄。