Errors bei Trigger



  • Hallo!

    Ich habe eine Tabelle, in der unter anderem Spalten "Beginn" vom Typ date und "Dauer" vom Typ integer vorkommen.
    Ich möchte nun einen Trigger schreiben, der mir bei Änderung (update) von einem Wert aus einer dieser Spalten überprüft, ob die neuen Werte sich mit anderen Werten aus der Tabelle überschneiden.
    Zum Beispiel:

    Beginn_1 = 10.00 Uhr
    Dauer_1 = 30min

    Beginn_neu = 10.20 Uhr
    Dauer_neu = 10min

    Also ist der neue Wert ungülitg.

    Den Trigger habe ich schon geschrieben. Aber ich bekomme dauernd errors, wenn ich einen Update in der besagten Tabelle durchführe:

    ORA-06512: at "xxx.PF_UEBERSCHNEIDUNG", line 9
    ORA-06512: at "xxx.PF_UEBERSCHNEIDUNG", line 18
    ORA-04088: error during execution of trigger 'xxx.PF_UEBERSCHNEIDUNG'
    

    Wo ist denn der Fehler?

    create or replace
    trigger PF_Ueberschneidung
    before update of beginn, dauer on tab1
    for each row
    
    declare 
      ende_neu date;
    
      beginn_current date;
      dauer_current integer;
      ende_current date;
    
      cursor andere_werte is
        select beginn,dauer from tab1
        where :old.beginn != beginn and :old.dauer != dauer;
    
    begin
      lock table tab1 in exclusive mode;
    
      ende_neu := :new.beginn + :new.dauer /(60*24);
    
      open andere_werte;
      loop 
        fetch andere_werte into beginn_current, dauer_current;
        exit when andere_werte%NOTFOUND;
    
        ende_current := beginn_current + dauer_current / (60*24);
    
        if not (ende_neu >= beginn_current or 
               ende_current >= :new.beginn) then
          raise_application_error(-20007,'Ueberschneidung!');
          exit;
        end if;
      end loop;
      close andere_werte;
    end;
    


  • Hallo,

    Du müsstest eigentlich noch einen anderen Fehler bekommen haben. ORA-6512 zeigt Dir ja nur die Fehlerstelle aber nicht den Grund.

    Normalerweise darf man in einem Trigger nicht nochmal auf die Tabelle zugreifen, für die der Trigger geschrieben wurde. Vielleicht löst ja das Dein Problem aus.

    mfg Martin


Anmelden zum Antworten