Триггер Oracle sql для обновления таблицы на основе обновления другого поля в той же таблице

Я хотел бы создать триггер, который обновляет поле в таблице после обновления другого поля в той же таблице. Я не думаю, что это возможно с триггером «после вставки или обновления». Он компилируется, но когда я обновляю поле, оно видоизменяется.

Я создал триггер «перед вставкой или обновлением», который работает для вставок, но не работает для обновлений.

Это мой код:

create or replace
trigger TRIGGER_1
after insert or update of TOTAL_COUNT on TABLE_1
for each row
when (new.TOTAL_COUNT = 0)
begin
update TABLE_1
set count_accuracy_cde = 'absent';
end;

person Mr Magoo    schedule 24.10.2017    source источник
comment
Ваш триггер пытается обновить все строки в table_1. Какую строку вы действительно хотите изменить? Тот который обновляется?   -  person a_horse_with_no_name    schedule 24.10.2017
comment
Да, я просто хочу обновить строку, которая была обновлена   -  person Mr Magoo    schedule 24.10.2017
comment
Ответ экочегина - это то, что вы ищете. UPDATE не требуется, просто присвойте значение.   -  person a_horse_with_no_name    schedule 24.10.2017
comment
Вы не можете изменить :new после вставки триггера.   -  person Kaushik Nayak    schedule 24.10.2017


Ответы (1)


person    schedule
comment
Спасибо, я получаю эту ошибку - Ошибка: ORA-04084: невозможно изменить НОВЫЕ значения для этого типа триггера. - person Mr Magoo; 24.10.2017
comment
Попробуйте добавить ссылочное предложение. Я обновил код, вырезанный выше - person ekochergin; 24.10.2017
comment
Вы не можете изменить :new после вставки триггера. - person Kaushik Nayak; 24.10.2017
comment
Вуху. Да, я пропустил эту часть. Конечно, вам нужно использовать раньше, чтобы обновить новое значение - person ekochergin; 25.10.2017
comment
Ага. Так что нельзя сделать с после триггера. Похоже, мне понадобится хранимая процедура, чтобы получать любые обновления строки. Спасибо всем! - person Mr Magoo; 27.10.2017
comment
Почему не использовать перед триггером? Он может делать именно то, что вам нужно - person ekochergin; 27.10.2017
comment
Прежде чем триггер не подхватывает обновления поля, если строка уже существует. Он срабатывает для вставленных строк, но не срабатывает при обновлении поля, что является проблемой, которую я пытался решить. - person Mr Magoo; 30.10.2017
comment
Извините, отсутствовал какое-то время. Вы ошибаетесь, он создает таблицу tab_test(num_col number, text_col varchar2(10)); создайте или замените триггер TRIGGER_1 перед вставкой или обновлением в tab_test, ссылаясь на новый как новый старый как старый для каждой строки begin dbms_output.put_line(:new.num_col); конец; вставить в значение eko_test(1, '25'); -- записывает 1 в вывод обновления eko_test set num_col = 1000; -- записывает 1000 на выходе - person ekochergin; 16.11.2017