Announcement

Collapse
No announcement yet.

Trigger bei Update Datum setzen

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

  • Trigger bei Update Datum setzen

    Hallo,

    steh gerade etwas auf dem Schlauch, brauche einen Trigger, der mir bei einer Änderung in einer beliebigen Spalte das Datum in Spalte Change auf das aktuelle Datum setzt.

    So weit bin ich schon:

    Code:
    CREATE
    TRIGGER ChangeTrigger
     AFTER UPDATE ON MyTable 
    FOR EACH ROW 
    BEGIN
      update MyTable Set Change=localtimestamp where id=???;
    END;
    Wie komme ich an die ID in der Schleife???

    Vielen Dank.

  • #2
    Originally posted by chevyvan2000 View Post
    Hallo,

    steh gerade etwas auf dem Schlauch, brauche einen Trigger, der mir bei einer Änderung in einer beliebigen Spalte das Datum in Spalte Change auf das aktuelle Datum setzt.

    So weit bin ich schon:

    Code:
    CREATE
    TRIGGER ChangeTrigger
     AFTER UPDATE ON MyTable 
    FOR EACH ROW 
    BEGIN
      update MyTable Set Change=localtimestamp where id=???;
    END;
    Wie komme ich an die ID in der Schleife???

    Vielen Dank.

    - Wie lösen dies so : (Dies deckt sowohl einen Insert als auch einen Update ab). Du kannst dass Beispiel auf deine Bedürfnisse anpassen...

    CREATE OR REPLACE TRIGGER m_ruma.trig_app_xml_document_update
    BEFORE
    INSERT OR UPDATE
    ON m_ruma.app_xml_document
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    BEGIN
    IF (INSERTING)
    THEN
    SELECT SYSDATE
    INTO :NEW.UPDATED
    FROM DUAL;
    SELECT SYSDATE
    INTO :NEW.CREATED
    FROM DUAL;
    ELSIF (UPDATING)
    THEN
    SELECT SYSDATE
    INTO :NEW.UPDATED
    FROM DUAL;
    END IF;
    END;
    /

    Comment


    • #3
      Mehr ist da nicht dahinter

      Code:
      create or replace
      TRIGGER ChangeTrigger
       AFTER UPDATE ON MyTable 
      FOR EACH ROW 
      BEGIN
        :NEW.Change=sysdate;
      END;
      Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

      Comment


      • #4
        Hallo chevyvan2000,

        dein Trigger wäre sehr gefährlich, wenn du denn die ID hättest Er würde sich ja immer wieder selbst auslösen. Die Lösung für dein Problem hat dir Ulrich bereits gepostet.

        @Ulrich: SYSDATE gehört zu den Funktionen, die sich direkt in PL/SQL verwenden lassen, du brauchst also nicht den "Umweg" über "select into from dual" zu gehen.
        [highlight=sql]
        CREATE OR REPLACE TRIGGER m_ruma.trig_app_xml_document_update
        BEFORE
        INSERT OR UPDATE
        ON m_ruma.app_xml_document
        REFERENCING NEW AS NEW OLD AS OLD
        FOR EACH ROW
        BEGIN
        :NEW.UPDATED := SYSDATE;
        IF (INSERTING) THEN
        :NEW.CREATED := SYSDATE;
        END IF;
        END;
        [/highlight]
        Ist etwas kürzer

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Originally posted by DiddlMouse View Post
          Mehr ist da nicht dahinter

          Code:
          create or replace
          TRIGGER ChangeTrigger
           AFTER UPDATE ON MyTable 
          FOR EACH ROW 
          BEGIN
            :NEW.Change=sysdate;
          END;
          Hallo DiddlMouse,

          die Wertzuweisung (übrigens mit := und nicht mit = ) an :NEW.Variable ist nur in einem BEFORE-ROW Trigger sinnvoll und auch nur dort möglich.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Da muss ich mir in Zukunft mehr Mühe geben. Wollte eigentlich nur damit andeuten, das man sich ein select into sparen kann, es geht auch mit einer Zuweisung
            Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

            Comment


            • #7
              Vielen Dank an alle.

              Zum Abschluß, das ist der richtige Code für das Problem:
              Code:
              create or replace
              TRIGGER ChangeTrigger
               before UPDATE ON MyTable 
              FOR EACH ROW 
              BEGIN
                :NEW.Change:=LocalTimeStamp;
              END;
              LocalTimeStamp setzt auch die ms Werte beim TimeStamp.
              Insert brauche ich nicht, hab schon als Default-Wert LocalTimeStamp drin...

              Comment

              Working...
              X