【发布时间】:2015-07-14 06:26:18
【问题描述】:
我必须编写一个触发器来阻止一条河流穿过另一条河流。我真的很挣扎,任何帮助将不胜感激。 myriver 是包含河流所有信息的表格。所以在insert 一条新河流穿过一条现有河流时,我应该会收到一个错误。这是我所拥有的:
CREATE FUNCTION river_check() RETURNS TRIGGER AS $river_check$
BEGIN
-- Check that gid is given
IF NEW.gid IS NULL THEN
RAISE EXCEPTION 'river gid cannot be null';
END IF;
NEW.the_geom = (SELECT r.the_geom FROM myriver as r
WHERE ST_CROSSES(NEW.the_geom, r.the_geom));
IF NEW.the_geom THEN
RAISE EXCEPTION 'a river cannot cross another river';
END IF;
RETURN NEW;
END;
$river_check$ LANGUAGE plpgsql;
-- Function river_check is linked to a TRIGGER of same name:
CREATE TRIGGER river_check
BEFORE INSERT OR UPDATE ON myriver
FOR EACH ROW EXECUTE PROCEDURE river_check();
【问题讨论】:
标签: sql postgresql postgis plpgsql spatial