Как создать оператор обновления, который проверяет, меньше ли значение vlue, чем атрибут reorder_point для продукта - PullRequest
0 голосов
/ 25 октября 2018

Использование базы данных Outdoor Clubs & Product для создания триггера «product_reorder_au», который связан с операцией обновления в таблице продуктов.Триггер проверяет, будет ли во время обновления атрибута amount_in_stock его значение ниже значения атрибута reorder_point для продукта.Когда возникает такая ситуация, триггер автоматически вставляет новый заказ на покупку в таблицу purchase_order.Новый заказ на покупку будет использовать существующее значение атрибута supplier_no для продукта в таблице продуктов, а значение атрибута количества будет таким же, как значение reorder_qty для продукта в таблице продуктов.Сохраните источник триггера в виде файла сценария.

Вот как выглядит таблица продукта

enter image description here

Пока это то, что яЯ, как правило, запутался в том, как обновить таблицу и добавить то, что, как я предполагаю, будет оператором 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;
* 1014.* - Тестовый скрипт
update product
set quantity_in_stock = 5
where product_id = 10012;

Прилагается в других таблицах enter image description here

1 Ответ

0 голосов
/ 25 октября 2018

Вам нужен триггер 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...