2016-07-28 11 views
-4

Ich habe die folgende Tabelle, und ich möchte eine neue Tabelle erstellen, wenn ich den Status eines Mitarbeiters zu "bestätigen." Die neue Tabelle muss alle Spalten mit Daten dieses bestimmten Mitarbeiters enthalten.Oracle: Erstellen Sie eine neue Tabelle, wenn ich den Status eines Mitarbeiters aktualisieren

SQL> select * from employee; 

EMPID EMPNAME       SAL DOJ  STATUS 
----- ------------------------- ---------- --------- -------------------- 
    101 ALEX       10000 12-MAY-16 not_confirmed 
    102 PETER       20000 12-MAY-16 not_confirmed 
+2

, die eine sehr seltsame Lösung ist ... (Ie ist vermutlich die falsche Lösung. Sie uns das Problem per eMail statt und vielleicht können wir Ihnen eine viel bessere Alternative geben.) – jarlh

+2

Wollen Sie wirklich jedes Mal eine neue Tabelle erstellen, wenn Sie einen Mitarbeiter aktualisieren? Es wäre sinnvoller, beim Aktualisieren eines Mitarbeiters eine neue Zeile in einer employee_history-Tabelle zu erstellen. – OTTA

+1

Dies ist keine Frage. – sstan

Antwort

2

Erstellen Sie eine neue Tabelle für Mitarbeiter mit der gleichen Struktur von Tabelle Mitarbeiter, z. Mitarbeiter_Historie.

Erstellen Sie einen Trigger Nach Update auf die alten Werte in der Geschichte Tabelle einfügen Der Code sein kann:

CREATE OR REPLACE TRIGGER employee_after_update 
AFTER UPDATE ON employee 
FOR EACH ROW 
BEGIN 
IF(UPDATING('STATUS')) 
THEN 
    INSERT INTO employee_history(EMPID, EMPNAME, SAL , DOJ,STATUS) 
    VALUES(:old.EMPID, :old.EMPNAME , :old.SAL , :old.DOJ , :old.STATUS); 
END IF; 

END;

Sie können zusätzliche Tracking-Felder hinzufügen (wenn nötig) wie UPDATE_DATE, user_id (die Änderungen zu tun, ..)

+0

Dies sollte die richtige Antwort sein, aber logisch sollte die Geschichte nicht die ': alten' Werte enthalten? – SomeJavaGuy

+0

@Kevin: danke. In Verlaufstabellen wird normalerweise eine vollständige Kopie der ursprünglichen Zeile erstellt, wenn sich in der Quelltabelle etwas ändert. Referenz: http://database-programmer.blogspot.com.eg/2008/07/history-tables.html –

+0

Nochmals vielen Dank. Guter Punkt, ich werde den Code ändern, um zu verwenden: alt –