Hallo,
bin neu hier und unter Zeitdruck. Falls ich etwas falsch mache hier, bitte ich um Nachsicht. Werde mich baldmöglichst in die hiesigen Gepflogenheiten einlesen. Meine Frage habe ich (nicht nur hier) recherchiert, leider ohne Erfolg.
Vorhaben: Ein Trigger soll protokollieren, wenn im Schema des Benutzers ein Objekt ertsellt wird.
Idee : Trigger soll den aktuellsten /neuesten Eintrag aus USER_OBJECTS auslesen, also den mit MAX(timestamp)
Code:
CREATE OR REPLACE TRIGGER newobj_trg
AFTER CREATE on SCHEMA
DECLARE v_objname user_objects.OBJECT_NAME%type;
BEGIN
SELECT OBJECT_NAME into v_objname from user_objects where timestamp = (select max(timestamp) from user_objects);
DBMS_OUTPUT.PUT_LINE('Erstellt ' || v_objname);
END;
Ich kann erfolgreich kompilieren und es klappt FAST. Leider gibt der Trigger immer das vorletzte Objekt aus, also:
TRIGGER NEWOBJ_TRG kompiliert
sql> create synonym SYN_1
Trigger-Meldung: Erstellt NEWOBJ_TRG
sql> create synonym SYN_2
Trigger-Meldung: Erstellt SYN_1
Wo ist der Denkfehler ? Wenn ich den Trigger abschalte und nach
sql> create synonym SYN_N
sofort einen SELECT auf USER_OBJECTS mache, dann steht SYN_N sehr wohl drinnen. Somit kann meine erste Vermutung , USER_OBJECTS würde erst später (z.B. nach einem impliziten Commit ) geschrieben, nicht der Grund sein.
Für Hilfe bedanke ich mich schon jetzt !!!
Gruss, der "Quinoman"
bin neu hier und unter Zeitdruck. Falls ich etwas falsch mache hier, bitte ich um Nachsicht. Werde mich baldmöglichst in die hiesigen Gepflogenheiten einlesen. Meine Frage habe ich (nicht nur hier) recherchiert, leider ohne Erfolg.
Vorhaben: Ein Trigger soll protokollieren, wenn im Schema des Benutzers ein Objekt ertsellt wird.
Idee : Trigger soll den aktuellsten /neuesten Eintrag aus USER_OBJECTS auslesen, also den mit MAX(timestamp)
Code:
CREATE OR REPLACE TRIGGER newobj_trg
AFTER CREATE on SCHEMA
DECLARE v_objname user_objects.OBJECT_NAME%type;
BEGIN
SELECT OBJECT_NAME into v_objname from user_objects where timestamp = (select max(timestamp) from user_objects);
DBMS_OUTPUT.PUT_LINE('Erstellt ' || v_objname);
END;
Ich kann erfolgreich kompilieren und es klappt FAST. Leider gibt der Trigger immer das vorletzte Objekt aus, also:
TRIGGER NEWOBJ_TRG kompiliert
sql> create synonym SYN_1
Trigger-Meldung: Erstellt NEWOBJ_TRG
sql> create synonym SYN_2
Trigger-Meldung: Erstellt SYN_1
Wo ist der Denkfehler ? Wenn ich den Trigger abschalte und nach
sql> create synonym SYN_N
sofort einen SELECT auf USER_OBJECTS mache, dann steht SYN_N sehr wohl drinnen. Somit kann meine erste Vermutung , USER_OBJECTS würde erst später (z.B. nach einem impliziten Commit ) geschrieben, nicht der Grund sein.
Für Hilfe bedanke ich mich schon jetzt !!!
Gruss, der "Quinoman"