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

トリガーは、テーブル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値にアクセスできますが、変更することはできません。したがって、テーブルを更新する必要がありますが、ちょうど挿入された村を特定する必要があります。

+0

ありがとう、これは正しい答えでした! :) – Sjoerd

関連する問題