2017-01-12 25 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