2017-06-01 10 views
0

これは基本的に、挿入または更新が既存のものから1メートル以内にある場合に別のテーブルを更新するトリガーを作成しようとしています。ifステートメントでトリガーでSQLテーブルのエイリアス構文を修正します

if文にFROM句がないため、何も挿入できないため、正しく呼び出す方法がわかりません。

私はPostgreSQLでこれを行う方法を以下

CREATE TRIGGER access_node_aiu 
AFTER INSERT OR UPDATE 
ON schemab.table 
FOR EACH ROW 
EXECUTE PROCEDURE schemab.trigegr(); 

CREATE OR REPLACE FUNCTION schemab.trigger() 
RETURNS trigger AS 
$BODY$ 
BEGIN 

    if st_distance(new.geom, a.geom) < 1 then 
INSERT INTO schemab.overlap 
SELECT nextval('schemab.overlap_id_seq'::regclass), a.node_id, new.node_id, a.date, now(), st_distance(a.geom, new.geom), new.geom 
FROM schemab.table a; 
end if; 

    RETURN new; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 

を得ましたか。

+1

になぜ 'WHERE'に' IF'ことを変更しませんか? –

+0

@ŁukaszKamiński私はエラーが発生しました:「どこで」または「近く」で構文エラーが発生しました – Luffydude

+0

私は動作するはずの構文で自分の答えを投稿しました。 –

答えて

1

変更IF WHERE

CREATE OR REPLACE FUNCTION schemab.trigger() 
RETURNS trigger AS 
$BODY$ 
BEGIN 

INSERT INTO schemab.overlap 
SELECT nextval('schemab.overlap_id_seq'::regclass), a.node_id, new.node_id, a.date, now(), st_distance(a.geom, new.geom), new.geom 
FROM schemab.table a 
WHERE st_distance(new.geom, a.geom) < 1; 

    RETURN new; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100;