nanabama
Goto Top

Trigger after insert on

Hallo zusammen,
ich habe ein kleines Problemchen, bei dem es mich schon sehr wundert, dass ich es nicht alleine lösen kann.
Vielleicht könnt ihr mir helfen, mir die Schuppen von den Augen zu nehmen!

Mein Problem:
-Oracle Datenbank
-Trigger greift nach dem Einfügen einer neuen Zeile

Trigger läuft soweit auch schön ordentlich durch, jetzt möchte ich jedoch die neu eingefügten Datensätze weiterverarbeiten,
mit einem erneuten "INSERT INTO" in eine neue Tabelle.
:NEW und :OLD sind jedoch leider nicht möglich...
Wie lautet dieser blöde Befehl??

Vielen Dank euch!

Content-ID: 118462

Url: https://administrator.de/contentid/118462

Ausgedruckt am: 14.11.2024 um 11:11 Uhr

27234
27234 18.06.2009 um 10:50:39 Uhr
Goto Top
Hallo,

am besten ein kleines Beispiel
TRIGGER assist_art_after
   after update or insert or delete on assist_art
   for each row
declare
   key_c varchar2(1);
begin
   if inserting then
      aend_art := 'I';  
      key_c := :new.KEY;
      insert into log_tabelle
      values(key_c, :new.BEZEICHNUNG);
   elsif updating then
      aend_art := 'U';  
      key_c := :new.KEY;
      update log_tabelle
         set T8115_ASSISTENTENART = :new.BEZEICHNUNG
         where T8115_ASS_ARTEN_SCHLUESSEL = key_c;
   elsif deleting then
      aend_art := 'D';  
      key_c := :old.KEY;
      delete from log_tabelle
         where T8115_ASS_ARTEN_SCHLUESSEL = key_c;
   else null;
   end if;
end assist_art_after;

Gruß René
NanaBama
NanaBama 18.06.2009 um 10:58:13 Uhr
Goto Top
Hallo René,

danke für Dein Beispiel.
So in der Art habe ich es auch versucht, aber
"Fehler: ORA-04082: NEW- oder OLD-Verweise in Triggern auf Tabellenebene nicht zulässig"
27234
27234 18.06.2009 um 11:38:36 Uhr
Goto Top
Hallo,

na dann poste doch mal Dein Beispiel.

Gruß René
NanaBama
NanaBama 18.06.2009 um 12:29:12 Uhr
Goto Top
create or replace
TRIGGER ANLEGEN
AFTER INSERT ON Table1
DECLARE
   NUSER VARCHAR2(50);

BEGIN
   NUSER := :NEW.USERNAME;

   INSERT INTO Table2 (
                              DATUM,
                              USERA
                              ) 
   values               (
                              SYSDATE, 
                              NUSER
                              );
END;


Eigentlich sehr simpel, aber eben die Fehlermeldung.
Ich weiß nicht wie ich an diesen Usernamen rankomme!
Biber
Biber 18.06.2009 um 12:33:39 Uhr
Goto Top
Moin NanaBama,

Du schreibst (und glaubst wahrscheinlich auch)
Trigger greift nach dem Einfügen einer neuen Zeile
... aber nichtsdestotrotz ist Dein Trigger mit Sicherheit ein "Table-Trigger" und kein "row-Trigger" wie der in Bolle97s Beispiel.

Bei einem Table-Trigger (sprich: der feuert, wenn tabelle xy upgedated oder dorthin inserted wird) sind logischerweise keine :New/:Old-Referenzen erlaubt.

Grüße
Biber

[Edit] Upps, hat sich zeitlich mit NanaBamas Kommentar überschnitten....
Aber wie geschrieben - da ist kein "FOR EACH ROW", das ist gar kein Row-Trigger.
[/Edit]
NanaBama
NanaBama 18.06.2009 um 13:08:31 Uhr
Goto Top
Danke, danke, danke! ^^
Oh man ich hasse es, wenn etwas scheitert und es nur an solchen Kleinigkeiten liegt!

Ich hab ein "FOR EACH ROW" eingefügt und siehe da, es läuft!