Используйте базу данных Outdoor Clubs & Product, чтобы создать триггер product_reorder_au, связанный с операцией обновления таблицы продуктов. Триггер проверяет, не становится ли во время обновления атрибута amount_in_stock его значение ниже значения атрибута reorder_point для продукта. Когда возникает такая ситуация, триггер автоматически вставляет новый заказ на покупку в таблицу Purcha_order. В новом заказе на поставку будет использоваться существующее значение атрибута supplier_no для продукта в таблице продуктов, а значение атрибута количества будет таким же, как значение reorder_qty для продукта в таблице продуктов. Сохраните источник триггера как файл сценария.
Так выглядит таблица товаров
Пока что это то, что у меня есть, но я просто в целом не понимаю, как обновить таблицу и добавить то, что, как я предполагаю, будет оператором if then для обновления только тогда, когда reorderpoint
ниже, чем quantitiy_in_stock
.
CREATE TRIGGER product_reorder_au
AFTER UPDATE OF product
for each row
begin
IF Quantity_In_Stock < Reorder_Point
THEN
INSERT INTO Purchase_Order (Po_No, Po_Date, Product_Id, Quantity, Supplier_id)
VALUES ( );
END IF;
END;
- Тестовый сценарий
update product
set quantity_in_stock = 5
where product_id = 10012;
Вам нужен триггер BEFORE
, а не триггер AFTER
. См. ниже:
--Подготовка стола
CREATE TABLE product_1 (
quantity_in_stock NUMBER,
reorder_point NUMBER,
product_id NUMBER,
supplier_id NUMBER,
reorder_qty NUMBER
);
INSERT INTO product_1 VALUES (
20,
5,
10010,
500,
25
)
CREATE TABLE purchase_order (
po_no NUMBER,
po_date DATE,
product_id NUMBER,
quantity NUMBER,
supplier_id NUMBER
);
SQL> Select * from product_1;
QYT_IN_STOCK REORDER_PNT PRDT_ID SUPP_ID RERDR_QTY
----------- ---- ----- ----- -----
4 5 10010 500 25
--Курок
CREATE TRIGGER product_reorder_au BEFORE
UPDATE ON product_1
FOR EACH ROW
WHEN ( new.quantity_in_stock < old.reorder_point )
BEGIN
INSERT INTO purchase_order (
po_no,
po_date,
product_id,
quantity,
supplier_id
) VALUES (
1, --Populate this coulmn by a sequence or by some logic
SYSDATE,
:old.product_id,
:old.reorder_qty,
:old.supplier_id
);
END;
Исполнение:
SQL> UPDATE product_1
SET
quantity_in_stock = 4
WHERE product_id = 10010;
SQL> SELECT * FROM purchase_order;
PO_NO PO_DATE PRODUCT_ID QTY SUPP_ID
----- ------- -------- ---- -------
1 25-10-18 10010 25 500