Создать триггер обновления Oracle - PullRequest
0 голосов
/ 02 декабря 2018

Привет, ребята, впервые спрашиваю здесь, в переполнении стека.

Итак, мой вопрос заключается в следующем: когда строка вставляется в таблицу, необходимо рассчитать бонусные баллы и добавить их в столбец заработанных баллов в таблице B. Нам также необходимо рассчитать дополнительные баллы в зависимости отуровень клиентов в таблице B. В таблице B есть FK, который ссылается на таблицу C, которая содержит атрибут «Мне нужно», так что мой расчет заработанных баллов правильный.

Мне удалось скомпилировать следующий код, который в основном связываетТаблицы A и B, но я не знаю, как получить нужное значение из таблицы C, чтобы это было правильно.

CREATE OR REPLACE TRIGGER JavierRewards
AFTER INSERT ON Purchases
FOR EACH ROW
BEGIN
    UPDATE customers
    SET customers.earned_points = customers.earned_points + Round(:New.purchase_amount * 1.5)
    WHERE customers.cust_id = :new.cust_id;
END;

Есть идеи?Первое время обучения запускает, поэтому его немного расстраивает.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Вам следует рассмотреть возможность размещения действий вставки и обновления в какой-либо функции, поскольку триггеры следует использовать только в том случае, если это последний параметр, imho

0 голосов
/ 02 декабря 2018

Вы можете использовать следующий с дополнительным оператором выбора:

CREATE OR REPLACE TRIGGER JavierRewards
AFTER INSERT ON Purchases
FOR EACH ROW
    v_Extra_Amount TableC.Extra_Amount%type;
BEGIN
   BEGIN
      SELECT c.Extra_Amount 
        INTO v_Extra_Amount
        FROM TableC c 
        JOIN customers s on s.c_ID = c.ID
       WHERE s.cust_id = :new.cust_id;
     EXCEPTION WHEN no_data_found THEN v_Extra_Amount := 0;
   END;

    UPDATE customers s
       SET s.earned_points = s.earned_points + Round(:New.purchase_amount * 1.5) 
                            + (:New.Purchase_amount * v_Extra_Amount)
     WHERE s.cust_id = :new.cust_id;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...