Trigger-Aufstellung

Kampfgummibaerlie

Datenbank-Guru
Beiträge
743
Was genau braucht ein schöner Trigger wirklich alles?
Wie baut man einen solchen im optimalfall auf? (Reihenfolge und so)...

Ich würde jetzt gerne in die Tabelle Vermietungen auch den Maschinen_Namen einfügen, wo aber nur der primary key aus der Tabelle Maschinen eingefügt wird, und ich würde gerne "einfach" mittels einem after insert Trigger den Namen "einfügen"......

Ich glaube, ich bin zu ungeduldig geworden *wieder den Stock nehme, um mich auf ihm abzustützen*
 
Werbung:
Was genau braucht ein schöner Trigger wirklich alles?

Beachte einfach folgendes:

Code:
test=# \h create trigger
Anweisung:  CREATE TRIGGER
Beschreibung: definiert einen neuen Trigger
Syntax:
CREATE [ CONSTRAINT ] TRIGGER Name { BEFORE | AFTER | INSTEAD OF } { Ereignis [ OR ... ] }
  ON Tabellenname
  [ FROM verwiesener_Tabellenname ]
  [ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
  [ FOR [ EACH ] { ROW | STATEMENT } ]
  [ WHEN ( Bedingung ) ]
  EXECUTE PROCEDURE Funktionsname ( Argumente )

wobei Ereignis eins der folgenden sein kann:

  INSERT
  UPDATE [ OF Spaltenname [, ... ] ]
  DELETE
  TRUNCATE

test=#
 
LÖSUNG AUF MEINE FRAGE:

Um dieses Thema erfolgreich zu beenden, hier eine einfache Lösung bezüglich des Themas:

Eine Datenbank erstellen:
Code:
create database deindatenbankname;

Eine 1. Tabelle erstellen:
Code:
create table tablename_1(x integer);

Eine 2. Tabelle erstellen:
Code:
create table tablename_2(x integer);

Eine Trigger-Procedure erstellen: (WICHTIG!!!: das $copy$ an beiden enden ist wichtig, das return new ist ebenfalls wichtig)
Code:
create function copy() returns trigger as $copy$ begin insert into tablename_2(y) values (new.x); return new; end; $copy$ language plpgsql;

Einen Trigger für die Tabelle tablename_1 erstellen: (WICHTIG!!!: das for each row ist wichtig (hing ich zumindest eine Weile dran))
Code:
create trigger copy after insert on tablename_1 for each row execute procedure copy();



ZWECKS TESTEN, OB DER TRIGGER UND DIE FUNCTION DAZU EH FUNKTIONIEREN:

In die 1. Tabelle eine ganze Zahl einfügen:
Code:
insert into tablename_1(x) values ('1');

Alle Werte der 2. Tabelle aufrufen:
Code:
select * from tablename_2

Es sollte jetzt der Wert >>> 1 <<< auch in der Tabelle tablename_2 stehen.

Was die Trigger-Funktion macht, ist denke ich nur eine Frage der Kreativität, und wie man es umsetzt.
 
Werbung:
Fehler unterlaufen, die Spalte soll beim erstellen der 2. Tabelle natürlich y heißen, nicht x.

die Trigger-Function später würde in die Spalte y inserten wollen.

Sprich:
Code:
create table tablename_2 (y integer)
 
Zurück
Oben