2017-02-22 55 views
2

Ниже приведена фиктивная таблица, на которой я выполняю некоторые обновления. Здесь я манипулирую только столбцом «NAME». Мне нужно вставить затронутую строку (скажем), я изменяю вторую для «ID» -2, тогда мне нужно, чтобы только эта строка должна была вставлена ​​в новую таблицу с новым/обновленным значением. Я попытался сделать это с помощью триггера, но он вырвал ошибку в отношении мутации в таблице.Как вставить затронутые строки в новую таблицу

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

В таблице я хочу данные, чтобы вставить имеет ту же структуру, что и выше упомянутой таблицы и тех же колонках с таким же типом данных.

Просьба предложить, если это можно сделать любым другим способом или я пишу неправильный код для триггера. Вот код, который я написал для этой цели:

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 - это панель управления, а temp3 - новая.

ответ

3

Нет необходимости в выборе. И вы, вероятно, также хотите поместить значение идентификатора в таблице 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; 
/

И как триггер определяется как update of name вы на самом деле не нужно, чтобы проверить, если имя изменилось, но если вы хотите, вы можете сделать :

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

работал как шарм, спасибо большое. но что, если есть много столбцов? я все равно упомянул бы их отдельно, вставляя – hashir

+1

@hashir: да, вам нужно будет это сделать, вот как работает SQL 'insert'. –

+0

Большое вам спасибо за помощь брату! – hashir

 Смежные вопросы

  • Нет связанных вопросов^_^