Announcement

Collapse
No announcement yet.

Table sysdate bei Änderung bestimmter Spalte eintragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Table sysdate bei Änderung bestimmter Spalte eintragen

    Hallo,

    habe eine Table mit u.a. der Spalte STATUS.

    Nun möchte ich, falls sich die Spalte STATUS ändert, automatisch in der gleichen Tabelle die Spalte LETZTE_STATUSAENDERUNG mit sysdate beschreiben.
    (Somit also praktisch automatisch ein modify date für die Spalte STATUS mitführen).

    habs mit nem after update Trigger versucht:

    if (ld.STATUS <> :new.STATUS) then

    sql_str := 'update PROZESSUEBERWACHUNG set LETZTE_STATUSAENDERUNG=sysdate where ID='||:new.ID;
    execute immediate(sql_str);

    end if;


    Aber da kommt der beliebte ORA-04091: table ....is mutating, trigger/function may not see it fehler.

    Gibts da ne andere vielleicht triviale Lösung für?

    danke
    christoph

  • #2
    Gibts da ne andere vielleicht triviale Lösung für?
    Sicher, Du verwendest einen before Trigger und weist es der entsprechenden Variable zu
    Code:
    DECLARE
     l_date DATE;
    BEGIN
     select sysdate into l_date from dual;
     IF ...
       : new:=l_date;
     END IF;
    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      uaaaaarrrrrrgggghhhh...da probier ich eeewig rum mit Zwischentabelle und Funktionen und seh das einfachste vom einfachsten nicht mehr....

      dimitri...muchas gracias...



      habs jetzt ganz einfach gemacht:
      create or replace trigger TR_PROZESSUEBERWACHUNG_STATUS
      before update of STATUS on PROZESSUEBERWACHUNG
      for each row
      declare

      v_date date;

      begin

      if (ld.STATUS <> :new.STATUS) then

      select sysdate into v_date from dual;

      :new.LETZTE_STATUSAENDERUNG := v_date;


      end if;



      end;

      Comment

      Working...
      X