Я хочу, чтобы база данных не хранила в таблице значения, превышающие 20.
CREATE OR REPLACE TRIGGER Dont_Allow
AFTER INSERT ON Cities
FOR EACH ROW
WHEN (new.IDCity > 20)
BEGIN
dbms_output.put_line(' Failed to insert ' || :new.IDCity);
delete from orase where IDCity=:new.IDCity;
END;
Хотя это работает с точки зрения того, что на самом деле ничего не добавляется с ID > 20
, каждый раз, когда триггер пытается творить свою магию, это показывает:
ORA-04091: таблица SYSTEM.ORASE мутирует, триггер / функция может ее не видеть
ORA-06512: в "SYSTEM.DONT_ALLOW", строка 6
ORA-04088: ошибка во время выполнения триггера 'SYSTEM.DONT_ALLOW'
Как правильно делать то, что я хочу?
EDIT:
Я решил использовать для этого триггер:
После того, как новая строка вставлена в Employees
, триггер проверяет зарплату нового парня и, если она превышает 21 ед. / Час, он получает 5% от бонуса руководства. Хромой, но эй - я использую триггер, чтобы решить проблему, которой у меня нет: результат не будет красивым.
CREATE OR REPLACE TRIGGER Bite_Bonus
AFTER INSERT ON Employees
FOR EACH ROW
WHEN (new.HourSalary > 20)
BEGIN
update Management set Bonus = Bonus - 5/100 * Bonus;
END;