Нет необходимости использовать оператор UPDATE
, используйте оператор SELECT
с max(value)+1
. И чтобы иметь возможность изменить значение :new.
, необходимо преобразовать триггер в тип BEFORE
.
Итак, вы можете использовать тот, что ниже
CREATE OR REPLACE TRIGGER fq
BEFORE INSERT ON Courses
FOR EACH ROW
DECLARE
BEGIN
select nvl(max(frequency),0)+1
into :new.frequency
from Courses;
END;
Конечно, вам нужно commit
после оператора DML, я думаю, что лучше включить только один commit
вне этого триггера после оператора INSERT
, примененного к таблице Courses
, из-за обеспечения правила целостности транзакции.
P.S. Я знаю, что вы ограничены в использовании триггера, но использование последовательности для значения столбца frequency
- лучшая, практичная альтернатива, как предложил @nikhil sugandh. В этом случае триггер не нужен. Если вы используете DB версии 12c, вы можете добавить эту последовательность по умолчанию для столбца frequency
как frequency INTEGER GENERATED ALWAYS AS IDENTITY
во время создания таблицы.