Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Nach After Insert Trigger Feld automatisch aktualisieren

Dieses Thema im Forum "Oracle" wurde erstellt von Student_rookie89, 10 August 2013.

  1. Student_rookie89

    Student_rookie89 Neuer Benutzer

    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;
    
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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, ...
     
  3. ukulele

    ukulele Datenbank-Guru

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden