Changes between Version 1 and Version 2 of Triggers


Ignore:
Timestamp:
06/08/25 19:59:55 (4 days ago)
Author:
211301
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Triggers

    v1 v2  
    1 Triggers
     1= Тригер: trg_after_t_type_insert
     2Автоматски го менува статусот на производот откако ќе се финализира набавката.
     3
     4Логика:
     5* Се зема производот поврзан со TransactionID.
     6
     7* Ако типот е 'Buy', производот добива статус 'sold'.
     8
     9* Ако типот е 'Rent', производот добива статус 'rented'.
     10SQL код:
     11
     12{{{
     13CREATE TRIGGER trg_after_t_type_insert
     14AFTER INSERT ON t_type
     15FOR EACH ROW
     16BEGIN
     17  DECLARE v_product_id INT;
     18
     19  SELECT ProductID INTO v_product_id
     20  FROM procurement
     21  WHERE TransactionID = NEW.TransactionID;
     22
     23  IF NEW.Type = 'Buy' THEN
     24    UPDATE product SET Status = 'sold' WHERE ProductID = v_product_id;
     25  ELSEIF NEW.Type = 'Rent' THEN
     26    UPDATE product SET Status = 'rented' WHERE ProductID = v_product_id;
     27  END IF;
     28END;
     29
     30}}}
     31
     32= Тригер: refund_wallet_after_reject
     33Автоматски да се рефундира сумата на клиентот доколку неговото барање биде одбиено.
     34Логика:
     35* Кога статусот на барањето се менува од нешто друго во 'Rejected', парите се враќаат назад на соодветниот паричник (wallet).
     36SQL код:
     37{{{
     38CREATE TRIGGER refund_wallet_after_reject
     39AFTER UPDATE ON procurement_request
     40FOR EACH ROW
     41BEGIN
     42  IF NEW.Status = 'Rejected' AND OLD.Status != 'Rejected' THEN
     43    UPDATE wallet
     44    SET Balance = Balance + NEW.TotalPrice
     45    WHERE WalletID = NEW.CardID;
     46  END IF;
     47END;
     48}}}
     49
     50= Тригер: prevent_duplicate_pending_request
     51Спречува додавање на ново барање за набавка за производ кој веќе има статус Pending.
     52Логика:
     53* Доколку веќе постои барање за истиот ProductID со статус 'Pending', се прекинува внесувањето и се прикажува грешка.
     54SQL код:
     55{{{
     56CREATE TRIGGER prevent_duplicate_pending_request
     57BEFORE INSERT ON procurement_request
     58FOR EACH ROW
     59BEGIN
     60  IF EXISTS (
     61    SELECT 1 FROM procurement_request
     62    WHERE ProductID = NEW.ProductID AND Status = 'Pending'
     63  ) THEN
     64    SIGNAL SQLSTATE '45000'
     65      SET MESSAGE_TEXT = 'Овој производ веќе има барање во тек.';
     66  END IF;
     67END;
     68}}}