使用存储过程

时间:2017-01-12 22:57:51

标签: mysql sql stored-procedures triggers

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

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值。是否有可能使触发器完成它的工作?

1 个答案:

答案 0 :(得分:0)

我认为触发器应该为插入表xCoordinaat的每个新村庄调整yCoordinatVillage。如果是这种情况,我会使用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 - 值,但无法修改它们;因此,您必须对表进行更新,但您必须以某种方式识别刚刚插入的村庄。