Mehr

Wie setze/aktualisiere ich Spalten mit einem Trigger?

Wie setze/aktualisiere ich Spalten mit einem Trigger?


Ich möchte Attribute (alignment_horizontal,align_vertical) einer PostGIS-Geometrie (Punkt) mithilfe eines Triggers setzen/aktualisieren.

CREATE TABLE point ( gid serial NOT NULL, geom geometrie(point, SRID), label varchar(255), x_cord double precision, y_cord double precision,ausrichtung_horizontal varchar(255), ausrichtung_vertikal varchar(255), CONSTRAINT point_pkey PRIMARY KEY (gid) ); TRIGGER ERSTELLEN label_alignment_trigger BEVOR EINEN Punkt EINFÜGEN ODER AKTUALISIEREN FÜR JEDE ZEILE AUSFÜHRUNGSVERFAHREN label_alignment_triggerfn();

Gibt es eine Möglichkeit, zwei Spalten in einer Triggerfunktion festzulegen/zu aktualisieren?

FUNKTION ERSTELLEN ODER ERSETZEN label_alignment_triggerfn() RETURNS trigger AS $body$ BEGIN NEW.alignment_horizontal := CASE WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))' < 22.5 THEN Center' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) < 112.5 THEN 'Left' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord , NEW.y_cord), SRID))) < 202.5 THEN 'Center' WHEN Degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) < 292.5 THEN 'Right' WHEN Grad (ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) >= 292.5 THEN 'Center' END; NEW.alignment_vertical := CASE WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) < 22.5 THEN 'Bottom' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID .(St_MakePoint) (NEW.x_cord, NEW.y_cord), SRID))) < 112.5 THEN 'Half' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) < 202.5 THEN ' Top' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord, NEW.y_cord), SRID))) < 292.5 THEN 'Half' WHEN degree(ST_Azimuth(NEW.geom, ST_SetSRID(St_MakePoint(NEW.x_cord .) , NEW.y_cord), SRID))) >= 292.5 THEN 'Bottom' END; RÜCKGABE NEU; ENDE; $body$ SPRACHE plpgsql;

Bearbeiten: Triggerfunktion bearbeitet.


Sie sollten sich auf jedes Feld als NEW.field_name beziehen

Ex:

WHEN Grad(ST_Azimuth(NEW.geom, ST_Point(NEW.x_cord, NEW.y_cord))) < 22.5 THEN 'Center'

Schau das Video: Jak jednoduše aktualizovat systém Android