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-Key: 118462

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

Printed on: April 26, 2024 at 04:04 o'clock

Mitglied: 27234
27234 Jun 18, 2009 at 08:50:39 (UTC)
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é
Member: NanaBama
NanaBama Jun 18, 2009 at 08:58:13 (UTC)
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"
Mitglied: 27234
27234 Jun 18, 2009 at 09:38:36 (UTC)
Goto Top
Hallo,

na dann poste doch mal Dein Beispiel.

Gruß René
Member: NanaBama
NanaBama Jun 18, 2009 at 10:29:12 (UTC)
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!
Member: Biber
Biber Jun 18, 2009 at 10:33:39 (UTC)
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]
Member: NanaBama
NanaBama Jun 18, 2009 at 11:08:31 (UTC)
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!