Если вы всегда знали, что хотите поместить «предыдущее» значение последовательности в две строки после той, которую вы обновили, с помощью «следующего» следующего значения, вы можете использовать составной триггер, аналогично следующему (Oracle Синтаксис, пожалуйста, прости):
CREATE OR REPLACE TRIGGER DEPENDENCY_COMPOUND
FOR UPDATE ON DEPENDENCY
COMPOUND TRIGGER
TYPE tDependency_row_table IS TABLE OF DEPENDENCY%ROWTYPE;
tblDependency_rows tDependency_row_table := tDependency_row_table();
AFTER EACH ROW IS
BEGIN
tblDependency_rows.EXTEND;
tblDependency_rows(tblDependency_rows.LAST).ID = NEW.ID+1;
tblDependency_rows(tblDependency_rows.LAST).VID = seq_VID.CURRVAL;
tblDependency_rows.EXTEND;
tblDependency_rows(tblDependency_rows.LAST).ID = NEW.ID+2;
tblDependency_rows(tblDependency_rows.LAST).VID = seq_VID.CURRVAL;
END;
AFTER STATEMENT IS
BEGIN
FOR i IN tblDependency_rows.FIRST..tblDependency_rows.LAST LOOP
UPDATE DEPENDENCY
SET VID = tblDependency_rows(i).VID
WHERE ID = tblDependency_rows(i).ID;
END LOOP;
END;
END DEPENDENCY_AU;
Тогда вы выдадите свое заявление об обновлении как
UPDATE DEPENDENCY
SET VID = seq_VID.NEXTVAL
WHERE ID = 8371;
и триггер должен позаботиться об обновлении двух других строк.
Составной триггер полезен в Oracle 11+, чтобы помочь обойти ошибку «мутирующей таблицы», которая возникает, когда триггер пытается ВЫБРАТЬ, ВСТАВИТЬ, ОБНОВИТЬ или УДАЛИТЬ данные в той же таблице, в которой включен триггер. 1009 *
Это довольно надуманная ситуация, в которой делается ряд предположений о том, какие строки следует обновлять, но, возможно, это окажется полезным.
Делись и наслаждайся.