Nach After Insert Trigger Feld automatisch aktualisieren

Student_rookie89

Neuer Benutzer
Beiträge
1
Hallo.
Ich befinde mich zurzeit noch im Studium und lerne gerade mit SQL zu arbeiten. Bedeutet ich bin noch ein blutiger Anfänger. Ich benutze den SQLDeveloper von Oracle.
Ich habe folgendes Problem:

Ein Kunde sucht sich aus der „Tabelle: Speiseplan“ eine Speise aus. Dann wird diese Speise in der „Tabelle: Bestellung“ gespeichert. Nach der Speicherung soll die „Spalte: Anzahl“ in der „Tabelle: Zubereitung“ automatisch um den Wert 1 erhöht werden.
Das Ganze soll mit einem Trigger gelöst werden. Aber irgendwie will das nicht so recht klappen. Ich hoffe ihr könnt mir helfen.

Aufbau/Beziehung der Tabellen:

Tab_Bestellung
(Index, Speisenummer(FK))

Tab_Spieseplan
(Speisenummer(PK), Bezeichnung)

Tab_Zubereitung
(Index, Speisenummer(FK), Anzahl)


bisheriger Versuch:

Code:
CREATE OR REPLACE TRIGGER ADD_SPEISE
AFTER INSERT ON Bestellung
BEGIN
  UPDATE Zubereitung zb
  SET zb.anzahl = zb.anzahl + 1
  WHERE zb.speisenummer = Bestellung.speisenummer;
END;
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.150
Hallo.
Ich befinde mich zurzeit noch im Studium und lerne gerade mit SQL zu arbeiten. Bedeutet ich bin noch ein blutiger Anfänger. Ich benutze den SQLDeveloper von Oracle.
Ich habe folgendes Problem:

Ein Kunde sucht sich aus der „Tabelle: Speiseplan“ eine Speise aus. Dann wird diese Speise in der „Tabelle: Bestellung“ gespeichert. Nach der Speicherung soll die „Spalte: Anzahl“ in der „Tabelle: Zubereitung“ automatisch um den Wert 1 erhöht werden.
Das Ganze soll mit einem Trigger gelöst werden. Aber irgendwie will das nicht so recht klappen. Ich hoffe ihr könnt mir helfen.

Aufbau/Beziehung der Tabellen:

Tab_Bestellung
(Index, Speisenummer(FK))

Tab_Spieseplan
(Speisenummer(PK), Bezeichnung)

Tab_Zubereitung
(Index, Speisenummer(FK), Anzahl)


bisheriger Versuch:

Code:
CREATE OR REPLACE TRIGGER ADD_SPEISE
AFTER INSERT ON Bestellung
BEGIN
  UPDATE Zubereitung zb
  SET zb.anzahl = zb.anzahl + 1
  WHERE zb.speisenummer = Bestellung.speisenummer;
END;


Da ich mit Oraggle nicht hantiere kann ich nur vermuten. Ich vermute mal, Anzahl ist aktuell NULL. NULL + 1 bleibt NULL. Aber das ist nur eine Vermutung.

In PG würde es so gehen, vielleicht hilft es Dir, da Oraggle viel von PG gelernt hat (oder war es umgedreht?)

Code:
test=# create table zubereitung(speise text, anzahl int);
CREATE TABLE
Time: 7,058 ms
test=*# insert into zubereitung values ('spiegelei',0);
INSERT 0 1
Time: 0,301 ms
test=*# insert into zubereitung values ('steak',0);
INSERT 0 1
Time: 0,143 ms
test=*# create table bestellung (speise text);
CREATE TABLE
Time: 27,753 ms
test=*# create or replace function update_zubereitung () returns trigger as $$begin update zubereitung set anzahl = anzahl +1 where speise = new.speise; returnnew;end;$$language plpgsql;
CREATE FUNCTION
Time: 0,594 ms
test=*# create trigger trg1 after insert on bestellung for each row execute procedure update_zubereitung();CREATE TRIGGER
Time: 0,272 ms
test=*# insert into bestellung values ('steak');
INSERT 0 1
Time: 0,923 ms
test=*# select * from zubereitung ;
  speise   | anzahl
-----------+--------
 spiegelei |      0
 steak     |      1
(2 rows)


Sehr stark vereinfacht, geb ich zu, ...
 
Werbung:
Oben