Announcement

Collapse
No announcement yet.

Update Trigger

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

  • Update Trigger

    Hallo,

    ich habe verschiedene Tabellen in einer<BR>
    Firebird-DB. In jeder dieser Tabellen gibt
    es am Ende<br>4 Felder:<br><br>

    SYSTEM_CREATED GLOBAL_TIMESTAMP<br>
    SYSTEM_CREATED_USER GLOBAL_USER<br>
    SYSTEM_UPDATED GLOBAL_TIMESTAMP<br>
    SYSTEM_UPDATED_USER GLOBAL_USER<br><br>

    Meine Frage ist nun, kann ich den unten<BR>
    aufgeführten AFTER_UPDATE-Trigger so
    verwenden<br>oder muss da noch ne Where-Abfrage
    mit rein.<br>

    <pre>
    SET TERM ^ ;

    CREATE TRIGGER Update_table1 FOR table1
    ACTIVE AFTER UPDATE POSITION 0
    AS
    begin
    update EE_TARA set
    SYSTEM_UPDATED = current_timestamp,
    SYSTEM_UPDATED_USER = current_user;
    end

    SET TERM ; ^
    <pre>

    Henry

  • #2
    Hallo Henry,

    wenn ich Dich richtig verstehe möchtest Du zu jedem datensatz wissen wann welcher User den Datensatz angelegt hat bzw. welcher User als letzter den Datensatz wann verändert hat?

    In diesem Fall ist ein "before-Insert/Update-Trigger" besser geeignet.
    <pre><b>
    CREATE TRIGGER Update_table1 FOR table1
    ACTIVE before UPDATE POSITION 0
    AS
    begin
    new.SYSTEM_UPDATED = current_timestamp;
    new.SYSTEM_UPDATED_USER = current_user;
    end
    </pre></b>

    Bei Deiner bisherigen Konstruktion wird nur der User gespeichert, der als letzter einen Datensatz angelegt bzw. verändert hat.
    Eine Where-Klausel ist auf jeden Fall sinnvoll, weil sonst mit Deinem Update die gesamte Tabelle verändert werden.

    Gruß

    Torate

    Comment


    • #3
      Super, danke dir.

      Jetzt noch ne kleine Frage.<br>
      Eine Tabelle sieht so aus:<br>
      <br>
      <pre>
      CREATE DOMAIN GLOBAL_SPID AS
      CHAR(12) CHARACTER SET ISO8859_1
      NOT NULL;

      CREATE DOMAIN GLOBAL_BEZEICHNUNG AS
      VARCHAR(200) CHARACTER SET ISO8859_1;

      CREATE DOMAIN GLOBAL_DECIMAL AS
      DECIMAL(15,2);

      CREATE DOMAIN GLOBAL_TIMESTAMP AS
      TIMESTAMP;

      CREATE DOMAIN GLOBAL_USER AS
      CHAR(31) CHARACTER SET ISO8859_1;
      /************************************************** ****************************/
      /**** Tables ****/
      /************************************************** ****************************/

      CREATE TABLE SP (
      SPID GLOBAL_SPID NOT NULL,
      BEZEICHNUNG GLOBAL_BEZEICHNUNG,
      WERT GLOBAL_DECIMAL NOT NULL,
      SYSTEM_CREATED GLOBAL_TIMESTAMP,
      SYSTEM_CREATED_USER GLOBAL_USER,
      SYSTEM_UPDATED GLOBAL_TIMESTAMP,
      SYSTEM_UPDATED_USER GLOBAL_USER
      );

      /************************************************** ****************************/
      /**** Primary Keys ****/
      /************************************************** ****************************/

      ALTER TABLE EE_TARA ADD CONSTRAINT PK_EE_TARA PRIMARY KEY (TARAID);

      </pre>

      Wenn ich jetzt im ibExpert ein Datensatz<br>
      unter DATA hinzufügen möchte kommt immer:<br><br>

      The insert failed because a column definition includes validation constraints.<br>
      validation error for column TARAID, value "*** null ***".<br><br>

      Mein SQL-Statement zum Test über SQL:<br><br>

      <pre>
      Insert Into sp (spid,bezeichnung,wert) Values ('HalloWELTSDS','HalloWElt',123.35)
      </pre>

      Die letzten vier Felder werden jetzt über die Trigger aus der<br>
      vorherigen Frage belegt

      Comment


      • #4
        Hat sich erledigt.
        Ich habe ein Backup/Restore durchgeführt
        und jetzt gehts

        Comment

        Working...
        X