Announcement

Collapse
No announcement yet.

Mutating Triggers

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

  • Mutating Triggers

    Hallo,

    ich habe folgende Tabellen

    tabelle1(spalte1 NUMBER);
    tabelle2(spalte2 NUMBER);

    tabelle 1 hat einen AFTER-insert trigger der in tabelle2 schreiben soll:
    create or replace trigger tabelle1_trg
    after insert on tabelle1
    for each row
    declare
    begin
    insert into tabelle2(spalte2) values(:new.spalte1);
    end;

    soweit kein problem.
    jetzt hab ich allerdings in tabelle2 einen BEFORE-insert trigger, der tabelle1 abfragen soll:
    create or replace trigger tabelle2_trg
    before insert on tabelle2
    for each row
    declare
    begin
    select count(*) into :new.spalte2 from tabelle1;
    end;

    jedes mal,. wenn ich jetzt versuche, einen Insert in Tabelle1 zu machen, bekomme ich einen Mutating-Trigger-Error. Wieso ist das so? Nachdem ich in Tabelle1 ohnehin einen AFTER-Insert mache, gehe ich davon aus, das die Tabelle wieder selektierbar sein müsste ...
    ist sie aber nicht!
    wie muss ich mein konzept ändern, damit das funktioniert?
    die folgende funktionalität soll dabei erhalten bleiben:
    *) bei einem insert in tabelle1 soll ein insert in tabelle2 gemacht werden
    +) wenn ein insert in tabelle2 gemacht wird, soll der :new-record mit werten aktualisiert werden, die aus tabelle1 ermittelt werden.

    soweit mal.

    mfg,
    guni

  • #2
    Hallo guni,

    da du in tabelle 2 ein select count(*) from tabelle1 einfügen möchtest, benötigst du hier keinen FOR EACH ROW-Trigger.

    Das Einfachste wäre ein AFTER-Statement-Trigger für INSERT ON tabelle1, welcher ein INSERT mit dem entsprechenden select count(*) in tabelle2 macht. Den Trigger auf tabelle2 brauchst du dann nicht mehr und mit Statement-Trigger statt FOR EACH ROW-Trigger gibts auch kein Problem mit Mutating-Tables.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X