Einfache Abhängigkeit bei insert-Trigger

Programmierung mit PostgreSQL (C#, PHP, Perl, Java, ...)
Antworten
schweitzerili
Benutzer
Beiträge: 56
Registriert: Di 13. Okt 2015, 09:35

Einfache Abhängigkeit bei insert-Trigger

Beitrag von schweitzerili » Do 8. Dez 2016, 17:31

Hallo,

ich versuche mich gerade an Triggern und Abhängigkeiten. Kurze Zusammenfassung meines Standes:

Habe eine Urtabelle im Schema Public. In dieser sind Spalten mit Zahlen. Bsp: Spaltenname: x Values: 32222, 43333, 32211 und soweiter.
Nun habe ich eine eine weitere Tabelle in einem eigens dafür angelegtem Schema.
Mithilfe eines After-Triggers und der dazu gebauten Funktion, kopiere ich bestimmte Spalten bei einem INSERT oder DELETE in der Urtabelle in die neue Tabelle.
Nun hat die neue Tabelle eine weitere Spalte welche ich durch eine Abhängigkeit befüllen möchte:

Ich möchte dass mir diese Abhängikeit in der neuen Tabelle bei einem Insert (durch den Trigger) folgendes geprüft und in die weiter Spalte "eingetragen" wird:
Prüfe ob bei dem Insert in die Spalte x ein wert mit 3 oder 4 an erster Stelle geinsert wird und wenn ja, dann schreibe mir bei einer 3 in Spalte S 38532 und bei einer 4 an erster stelle 38533 in Spalte S. wenn es weder 3 oder 4 an erster stelle ist dann insert mit eine 0 in spalte S.

Es wäre mir eine große Hilfe wenn mir da jemand helfen könnte. Ich kenne mich mit den IF-Geschichten absolut nicht aus.
Desweiteren müsste ich wissen ob ich das gleich mit in die Funktion des Insert-triggers bauen muss oder einen eigenen Trigger dafür bauen muss.

Vielen Dank.

Hier noch die Codes was ich bisher habe:

ZielTabelle:

Code: Alles auswählen

CREATE TABLE "Kopie"."Stammdaten"
(
  prj_id character varying(6) NOT NULL,
  xcoord double precision,
  ycoord double precision,
  zcoordb double precision,
  longname character varying(40),
  projekt character varying(40),
  gid serial NOT NULL,
  geom "Kopie".geometry(Point,25832)
)
Trigger und Funktion bisher:

Code: Alles auswählen

CREATE TRIGGER sync
  AFTER INSERT OR UPDATE OR DELETE
  ON public.geodin_loc_ssgkrzt1
  FOR EACH ROW
  EXECUTE PROCEDURE public.insert();
  
  CREATE OR REPLACE FUNCTION public.insert()
  RETURNS trigger AS
$BODY$
      BEGIN
        insert into "Kopie"."Stammdaten" (prj_id,xcoord,ycoord,zcoordb,longname,projekt)
	select prj_id,xcoord,ycoord,zcoordb,longname,projekt
	from public.geodin_loc_ssgkrzt1;
	RETURN NULL;
      END;
  $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100000;
ALTER FUNCTION public.insert()
  OWNER TO postgres;
  

akretschmer
Erfahrener Benutzer
Beiträge: 7532
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Einfache Abhängigkeit bei insert-Trigger

Beitrag von akretschmer » Do 8. Dez 2016, 18:14

Prüfe ob bei dem Insert in die Spalte x ein wert mit 3 oder 4 an erster Stelle geinsert wird und wenn ja, dann schreibe mir bei einer 3 in Spalte S 38532 und bei einer 4 an erster stelle 38533 in Spalte S. wenn es weder 3 oder 4 an erster stelle ist dann insert mit eine 0 in spalte S.
Dazu braucht man keinen TRIGGER oder sowas. Bei einem Select kannstDu das prüfen und als extra Spalte oder wie auch immer gewünscht ausgeben.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

schweitzerili
Benutzer
Beiträge: 56
Registriert: Di 13. Okt 2015, 09:35

Re: Einfache Abhängigkeit bei insert-Trigger

Beitrag von schweitzerili » Fr 9. Dez 2016, 08:45

Ok danke,

aber ich möchte dass diese Prüfung jedesmal automatisch passiert wenn etwas mit dem Trigegr in die neue Tabelle kommt. Ist das gewährleistet mit einem einfachen SELECT?

akretschmer
Erfahrener Benutzer
Beiträge: 7532
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Einfache Abhängigkeit bei insert-Trigger

Beitrag von akretschmer » Fr 9. Dez 2016, 09:13

sowas vielleicht?

Code: Alles auswählen

test=# create table schweitzerili (x int);
CREATE TABLE
test=*# insert into schweitzerili values (32222);
INSERT 0 1
test=*# insert into schweitzerili values (43333);
INSERT 0 1
test=*# insert into schweitzerili values (32211);
INSERT 0 1
test=*# insert into schweitzerili values (12345);
INSERT 0 1
test=*# select * from schweitzerili ;
   x   
-------
 32222
 43333
 32211
 12345
(4 Zeilen)

test=*# select *, case substring (x::text,1,1) when  '3' then 38532 when '4' then 38533 else 0 end as s from schweitzerili ;
   x   |   s   
-------+-------
 32222 | 38532
 43333 | 38533
 32211 | 38532
 12345 |     0
(4 Zeilen)

test=*# 
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten