Создайте триггер с именем products_before_update, который проверяет новое значение для столбца discount_percent таблицы Products.Этот триггер должен вызвать соответствующую ошибку, если процент скидки больше 100 или меньше 0. Если новый процент скидки находится между 0 и 1, этот триггер должен изменить новый процент скидки, умножив его на 100. Таким образом, скидкапроцентов от .2 становится 20. Протестируйте этот триггер с помощью соответствующего оператора UPDATE.
Либо, если оператор не работает, или я получаю сообщение о том, что таблица мутирует, поэтому триггер не может ее увидеть ..
connect mgs/mgs;
CREATE or replace TRIGGER products_before_update
BEFORE UPDATE ON Products
FOR EACH ROW IS
BEGIN
IF :NEW.discount_percent > 100 THEN
RAISE_APPLICATION_ERROR(-20001, 'the discount percent cannot be greater than 100.');
ELSEIF :new.discount_percent < 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'the discount percent cannot be less than 0.');
ELSEIF :NEW.discount_percent < 1 THEN
SET :NEW.discount_percent = (:NEW.discount_percent * 100);
END IF;
END;
/
SET SERVEROUTPUT ON;
UPDATE Products
SET discount_percent = .4
WHERE product_id = 3;
Я ожидаю сообщения, после чего значение выходит за [0,100] или обновляется, когда оно было (0; 1), но триггер не реагирует ни в коем случае.