Триггер не будет работать, потому что вы не можете выбрать или даже удалить из таблицы, к которой принадлежит триггер.
Но на самом деле вам не нужно, упорядоченное значение можно получить через: new.quantity.
И если вы выдадите ошибку, INSERT не произойдет, нет необходимостина DELETE
строку.
Итак - если я правильно понял ваше намерение - следующее должно делать то, что вы хотите:
CREATE OR REPLACE TRIGGER Checks_Order
BEFORE INSERT ON order_line
FOR EACH ROW
DECLARE
total INT;
BEGIN
if (:new.quantity > 0) then
SELECT p.stock
INTO total
FROM products p
WHERE p.product_no = :new.product_no;
IF (:new.quantity > total) then
RAISE_APPLICATION_ERROR(-20103, 'Not enough stock!');
END IF;
END IF;
END;
/
Кстати: я думаю, вы хотите :new.quantity > total
не <всего </strong>