2017-01-12 23 views
0

我想创建一个触发器,用一个过程的值更新表。我想触发器做这样的事情:使用存储过程中的值更新触发器中的表

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

我想触发器应该适应xCoordinaatyCoordinat插入表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值,但不能修改它们;因此,您必须在桌面上进行更新,但您必须确定刚刚插入的村庄。

+0

谢谢,这是正确的答案! :) – Sjoerd