Мне нужно создать триггер (не процедуру) для обновления промежуточного итога, shipping_charge, tax и total_amount. По сути, все эти атрибуты взяты из таблицы заказов, и каждый из них включает в себя некоторые вычисления. промежуточный итог = Unit_Price * QTY, где Unit_Price берется из таблицы Product, а QTY - из таблицы Orderline. Проблема заключается в том, что когда таблица заказов была создана впервые, даты exp_ship и exp_receive не было, поэтому мне пришлось изменить таблицу заказов, чтобы добавить эти новые столбцы. Мне не разрешено менять старые данные. Итак, я создал копию таблицы «Заказы» для записей и работал над исходной таблицей заказов. Теперь каждый раз, когда делается новый заказ, мне нужно написать триггер, который вычислит промежуточную сумму, shipping_charge, tax и total_amt, и обновит эти поля в таблице заказов.
Я попробовал следующий код, но ошибок так много. Извините, но я пробую это в первый раз. Я все еще в процессе обучения. Я должен сделать это, создав представление и используя вместо него триггер вместо. То есть получить информацию из представления и обновить таблицу заказов.
DROP VIEW ORDERS_V;
CREATE VIEW ORDERS_V AS
SELECT * FROM ORDERS;
CREATE OR REPLACE TRIGGER update_orders
INSTEAD OF INSERT ON ORDERS_V
FOR EACH ROW
DECLARE
SHIPPING_COST NUMBER(6,3);
BEGIN
SELECT UNIT_PRICE INTO UNIT_PRICE FROM PRODUCT;
SELECT QTY INTO QTY FROM ORDERLINE;
SELECT SHIPPING_METHOD INTO SHIPPING_METHOD FROM ORDERS;
SELECT SUBTOTAL INTO SUBTOTAL FROM ORDERS;
UPDATE ORDERS
SET SUBTOTAL = UNIT_PRICE * QTY;
IF SHIPPING_METHOD = 'GROUND' THEN
shipping_cost := .05;
ELSIF SHIPPING_METHOD = '1 DAY' THEN
shipping_cost := .15;
ELSIF SHIPPING_METHOD = '2 DAY' THEN
shipping_cost := .10;
ELSE
shipping_cost := 0;
END IF;
UPDATE ORDERS
SET shipping_charge = SUBTOTAL * shipping_cost;
END;
/