2017-02-22 3 views
2

Es folgt eine Dummy-Tabelle, auf der ich einige Aktualisierungen durchführe. Hier manipuliere ich nur die Spalte "NAME". Was ich brauche, ist die betroffene Zeile einzufügen, (sagen wir) ich ändere die zweite für "ID" -2, dann brauche ich, dass nur diese Zeile in eine neue Tabelle mit neuen/aktualisierten Wert eingefügt werden soll. Ich habe versucht, dies über einen Trigger zu tun, aber es gibt einen Fehler in Bezug auf Tabelle Mutation.So fügen Sie betroffene Zeilen in eine neue Tabelle ein

ID NAME 
================ 
    1 Vaz 
    2 Dan 
    3 Steve 

Die Tabelle i die Daten will eingefügt werden hat die gleiche Struktur wie die oben erwähnte Tabelle und dieselben Spalten mit dem gleichen Datentyp.

Bitte schlagen Sie vor, ob dies auf eine andere Weise geschehen könnte oder ich schreibe einen falschen Code für den Auslöser. Hier ist der Code, den ich für den Zweck schrieb:

CREATE OR REPLACE TRIGGER HR.ins_temp 
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW 
BEGIN 
INSERT INTO temp3 
(SELECT NAME 
FROM temp2 
WHERE (:new.NAME<>:old.NAME)); 
END; 

temp2 ist die Manipulationstabelle und temp3 ist die neue.

Antwort

3

Keine Notwendigkeit für ein SELECT. Und Sie wollen wahrscheinlich auch den ID-Wert in den Tisch legen temp3

CREATE OR REPLACE TRIGGER HR.ins_temp 
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW 
BEGIN 
    INSERT INTO temp3 (id, name) 
    values (:new.id, :new.name); 
END; 
/

Und der Auslöser ist definiert als update of name Sie wirklich brauchen nicht zu prüfen, ob der Name geändert, aber wenn Sie möchten, können Sie tun :

CREATE OR REPLACE TRIGGER HR.ins_temp 
after UPDATE OF name ON HR.TEMP2 FOR EACH ROW 
BEGIN 
    if ( (:new.name <> :old.name) 
     OR (:new.name is null and :old.name is not null) 
     OR (:new.name is not null and :old.name is null)) 
then 
    INSERT INTO temp3 (id, name) 
    values (:new.id, :new.name); 
    end if; 
END; 
/
+0

arbeitete wie ein Charme, dank viel. aber was ist, wenn es viele Spalten gibt? Ich hätte sie immer noch separat erwähnen können, während – hashir

+1

@hashir: Ja, Sie müssen das tun, so funktioniert eine SQL-Anweisung "einfügen". –

+0

Vielen Dank für die Hilfe Bruder! – hashir

Verwandte Themen