PL / pgSQL trigger to stop a river crossing another river

I have to write a trigger to stop a river crossing another river. I am really struggling with this and any help would be greatly appreciated. myriver- a table containing all the information about the rivers. So, after a insertnew river, if it crosses an existing river, I should get an error. Here is what I have:

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();
+4
source share
1 answer

/ (NEW.the_geom). , ( ), IF ( NEW.the_geom ).

, Postgres pl/pgsql , IF, , "", , , PHP.

a DECLARE block, , , IS NULL; EXISTS :

IF EXISTS (
    SELECT r.the_geom FROM myriver as r
    WHERE ST_CROSSES(NEW.the_geom, r.the_geom)
)
THEN
    RAISE EXCEPTION 'a river cannot cross another river';
END IF;
+2
source

All Articles