tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
1011
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    zyth zyth ist offline Rookie
    Registriert seit
    Nov 2006
    Beiträge
    5
    Hallo zusammen,

    ich habe einem Trigger erstellt, der auch Valid ist aber er funktioniert leider nicht.
    Wer kann mir hier weiterhelfen?, für Jeder Hilfe bin ich sehr Dankbar.

    In eine Oracle Tabelle ANGEBOTE gibt es unter anderem eine Spalte ERGEBNIS, die bestimmte Einträge, wie z.B. NK, NT, NR, NB und ER enthält, und eine Spalte DAENDDAT mit dem Format DATE.
    Ich will das das Aktuelle Datum (SYSDATE) in die Spalte DAENDDAT automatisch eingetragen wird, sobald ich in der Spalte ERGEBNIS den vorhandenen Wert auf ER ändere.
    Meine Trigger sicht so aus:

    CREATE OR REPLACE TRIGGER ANG_DAT_AKT
    AFTER INSERT OR UPDATE
    OF ERGEBNIS
    ON ANGEBOTE
    FOR EACH ROW
    DECLARE
    Tagesdatum Date;
    BEGIN
    select sysdate into Tagesdatum from dual;
    IF ((:OLD.ERGEBNIS != ’ER’) AND (:NEW.ERGEBNIS =’ER’)) THEN
    Update Angebote SET DAENDDAT = Tagesdatum;
    END IF;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    null;
    WHEN OTHERS THEN
    null;
    END;
    /
     

  2. #2
    Avatar von Exceptionfault
    Exceptionfault Exceptionfault ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Ort
    Neckarsulm
    Beiträge
    348
    Zunächst mal solltes du deine Codebeispiel in eine lesbare Form bringen.

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    CREATE OR REPLACE TRIGGER ANG_DAT_AKT
       AFTER INSERT OR UPDATE
       OF ERGEBNIS
       ON ANGEBOTE
       FOR EACH ROW
    DECLARE
       Tagesdatum DATE;
    BEGIN
       SELECT sysdate INTO Tagesdatum FROM dual;
       IF ((:OLD.ERGEBNIS != ’ER’) AND (:NEW.ERGEBNIS =’ER’)) THEN
          UPDATE Angebote SET DAENDDAT = Tagesdatum;
       END IF;
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          NULL;
       WHEN OTHERS THEN
          NULL;
    END;
    /

    In deinem UPDATE Statement ist gar keine WHERE Klausel. Sollen alle Sätze das aktuelle Datum erhalten? Wenn ja wirst du auf den Fehler "ORA-xxxxx Trigger cannot modify mutating Table" oder so ähnlich laufen, nimm einfach mal deinen EXCEPTION Block raus, dann bekommst du auch die Fehlermeldung.

    Wenn du nur das Datum des einen Satzes ändern möchtest, solltest du am besten einen BEFORE Trigger nehmen:

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    CREATE OR REPLACE TRIGGER ANG_DAT_AKT
       BEFORE INSERT OR UPDATE
       OF ERGEBNIS
       ON ANGEBOTE
       FOR EACH ROW
    DECLARE
    BEGIN
       IF ( ((:OLD.ERGEBNIS != ’ER’) OR (:OLD.ERGEBNIS IS NULL)) AND (:NEW.ERGEBNIS =’ER’)) THEN
          :NEW.DAENDDAT := SYSDATE;
       END IF;
    END;
    /
     
    liebe Grüße
    Exceptionfault (http://exceptionfault.de)

    Never say: "Always"! Always say: "Never say never"! - Tom Kyte @ Ask Tom Live in Berlin 2008

  3. #3
    zyth zyth ist offline Rookie
    Registriert seit
    Nov 2006
    Beiträge
    5
    Besten Dank Exceptionfault,

    das hat hervorragend geklappt!.

    Das war Super.
     

Ähnliche Themen

  1. Sqllite trigger Problem
    Von mike4004 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.09.10, 17:11
  2. BEFORE DELETE TRIGGER Problem
    Von klaussp im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 10.01.10, 15:11
  3. Problem mit MySQL Trigger
    Von VanHellsehn im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 11.03.09, 14:43
  4. Formular Problem HILFEEEE
    Von Onilink im Forum HTML & XHTML
    Antworten: 8
    Letzter Beitrag: 15.06.05, 03:52
  5. Hilfeeee....habe ein riesen problem
    Von Hamsi im Forum Microsoft Windows
    Antworten: 11
    Letzter Beitrag: 21.04.04, 09:37