on 2022 Jan 22 3:53 AM
Grüße Euch, wie müsste ein Trigger aussehen, der bei der Neuanlage eines Datensatzes ein Datum in der Tabelle mit dem Server - Datum füllt. Ich mache das bisher händisch aber es ist ein riesen Aufwand... VG Franz
[Translation] Greetings, what should a trigger look like that fills a date in the table with the server date when creating a new data record. I've been doing this manually so far, but it's a huge effort
Request clarification before answering.
You do not pass DEFAULT CURRENT TIMESTAMP from the client. It is part of the column definition. If you want to construct an INSERT statement that explicitly references a column and want to use its default, you pass DEFAULT as the value i.e., INSERT INTO T( ..., LogTime,... ) VALUES( ...,DEFAULT,... ). There is also a special value that is updated each time the row changes which can be useful if you want to monitor last modification.
-- sample schema showing DEFAULT CURRENT TIMESTAMP usage CREATE OR REPLACE TABLE T( pk INTEGER PRIMARY KEY DEFAULT AUTOINCREMENT, LogTime TIMESTAMP DEFAULT CURRENT TIMESTAMP, c CHAR(50) ); -- sample insert statements that sets DEFAULT value for LogTime INSERT INTO t ( c ) VALUES ( 'initial value' ); INSERT INTO t ( LogTime, c ) VALUES ( DEFAULT, 'initial value' ); SELECT * FROM t; -- add a column LastModified that logs last modification of the row -- DEFAULT TIMESTAMP is modified when the row is changed i.e., INSERT, UPDATE ALTER TABLE t ADD LastModified TIMESTAMP DEFAULT TIMESTAMP; -- sample insert statements INSERT INTO t ( c ) VALUES ( 'initial value' ); INSERT INTO t ( LogTime, LastModified, c ) VALUES ( DEFAULT, DEFAULT, 'initial value' ); -- LastModified will change for row with pk 2 UPDATE t SET c = 'updated value' WHERE pk = 2; SELECT * FROM t;
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Dazu brauchst Du keinen Trigger, deklariere die Spalte einfach als DEFAULT CURRENT TIMESTAMP (oder ggf. die UTC-Variante). Analog lassen sich so der jeweilige Benutzer und auch der Zeitpunkt und Benutzer der letzten Änderung automatisch setzen. Schau in der Hilfe nach "special values".
Und weil es Defaultwerte sind, kann man sie ggf. auch überschreiben, ich mache das ab und zu aus administrativen Gründen.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hallo zusammen, habe den folgenden Trigger angelegt um ein Datum zu updaten. Der Trigger wird aber nicht ausgeführt. Muss irgend etwas aktiviert werden? VG Franz Stampflmeier
ALTER TRIGGER "Datum Angelegt" AFTER UPDATE OF "ANGELEGT" ORDER 1 ON "dba"."Trexo_Kostentraeger" FOR EACH STATEMENT BEGIN SET Angelegt = Getdate() END
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Dieser AFTER UPDATE OF Trigger wird genau dann aktiviert, nachdem ein Update erfolgt ist, das den Wert von "Angelegt" tatsächlich geändert hat. Es müsste also ein UPDATE... SET ANGELEGT = <irgendein datum="">... der Auslöser sein.
Was Du dagegen haben möchtest, ist ein BEFORE UPDATE Trigger, der den Wert direkt setzt.
Außerdem ist die Syntax für einen Statement-Level-Trigger falsch, hier müsstest Du über einen Join mit inserted erstmal die betroffenen Datensätze selektieren.
Mach einen normalen UPDATE-Trigger ohne Angabe der Spalte ((also ohne "OF Angelegt") daraus, Du möchtest ja nicht, dass der Trigger nur auslöst, wenn die Spalte Angelegt geändert wurde, sondern wenn allgemein ein Update beim Datensatz erfolgt ist. Und Du musst via REFERENCING-Klausel festlegen, mit welchem Alias Du auf den aktualisierten Datensatz zugreifen möchtest, vgl. Das Beispiel aus der Hilfe:
CREATE TRIGGER TR_update_date BEFORE INSERT, UPDATE ON GROUPO.SalesOrderItems REFERENCING NEW AS new_row FOR EACH ROW BEGIN SET new_row.ShipDate = CURRENT TIMESTAMP; END;
User | Count |
---|---|
75 | |
30 | |
9 | |
8 | |
7 | |
6 | |
6 | |
5 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.