2016-07-28 2 views
-4

У меня есть следующая таблица, и я хочу создать новую таблицу всякий раз, когда я обновляю статус сотрудника для подтверждения. Новая таблица должна содержать все столбцы с данными этого конкретного сотрудника.Oracle: создайте новую таблицу, когда я обновляю статус сотрудника

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

Это очень странное решение ... (Т.е., скорее всего, неправильное решение. Говори нам проблемы вместо , и, возможно, мы можем дать вам гораздо лучшую альтернативу.) – jarlh

+2

Вы действительно хотите создать новую таблицу каждый раз, когда вы обновляете сотрудника? Было бы разумнее создать новую строку в таблице employee_history при обновлении сотрудника. – OTTA

+1

Это не вопрос. – sstan

ответ

2

Создать новую таблицу для сотрудника с той же структурой сотрудника таблицы, например. employee_history.

Создать триггер После обновления для вставки старых значений в таблице истории Код может быть:

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;

Вы можете добавить дополнительные поля для отслеживания (если это необходимо), как UPDATE_DATE, user_id (кто меняется, ..)

+0

Это должен быть правильный ответ, но логически не следует, чтобы история содержала значения ': old'? – SomeJavaGuy

+0

@Kevin: спасибо. Таблицы истории обычно включают в себя создание полной копии исходной строки, когда что-то изменяется в исходной таблице. Ссылка: http://database-programmer.blogspot.com.eg/2008/07/history-tables.html –

+0

Еще раз спасибо. Good Point, я буду изменять код для использования: old –