Как создать оператор обновления, который проверяет, является ли значение vlue ниже атрибута reorder_point для продукта

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

Так выглядит таблица товаров

Как создать оператор обновления, который проверяет, является ли значение vlue ниже атрибута reorder_point для продукта

Пока что это то, что у меня есть, но я просто в целом не понимаю, как обновить таблицу и добавить то, что, как я предполагаю, будет оператором 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;

Прикреплен в остальных таблицах Как создать оператор обновления, который проверяет, является ли значение vlue ниже атрибута reorder_point для продукта

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
139
1

Ответы 1

Вам нужен триггер 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

Другие вопросы по теме