wiki:Triggers

Version 3 (modified by 211301, 3 days ago) ( diff )

--

Тригер: trg_after_t_type_insert

Автоматски го менува статусот на производот откако ќе се финализира набавката.

Логика:

  • Се зема производот поврзан со TransactionID.
  • Ако типот е 'Buy', производот добива статус 'sold'.
  • Ако типот е 'Rent', производот добива статус 'rented'.

SQL код:

CREATE TRIGGER trg_after_t_type_insert
AFTER INSERT ON t_type
FOR EACH ROW
BEGIN
  DECLARE v_product_id INT;

  SELECT ProductID INTO v_product_id
  FROM procurement
  WHERE TransactionID = NEW.TransactionID;

  IF NEW.Type = 'Buy' THEN
    UPDATE product SET Status = 'sold' WHERE ProductID = v_product_id;
  ELSEIF NEW.Type = 'Rent' THEN
    UPDATE product SET Status = 'rented' WHERE ProductID = v_product_id;
  END IF;
END;

Тригер: refund_wallet_after_reject

Автоматски да се рефундира сумата на клиентот доколку неговото барање биде одбиено. Логика:

  • Кога статусот на барањето се менува од нешто друго во 'Rejected', парите се враќаат назад на соодветниот паричник (wallet).

SQL код:

CREATE TRIGGER refund_wallet_after_reject
AFTER UPDATE ON procurement_request
FOR EACH ROW
BEGIN
  IF NEW.Status = 'Rejected' AND OLD.Status != 'Rejected' THEN
    UPDATE wallet
    SET Balance = Balance + NEW.TotalPrice
    WHERE WalletID = NEW.CardID;
  END IF;
END;

Тригер: prevent_duplicate_pending_request

Спречува додавање на ново барање за набавка за производ кој веќе има статус Pending. Логика:

  • Доколку веќе постои барање за истиот ProductID со статус 'Pending', се прекинува внесувањето и се прикажува грешка.

SQL код:

CREATE TRIGGER prevent_duplicate_pending_request
BEFORE INSERT ON procurement_request
FOR EACH ROW
BEGIN
  IF EXISTS (
    SELECT 1 FROM procurement_request
    WHERE ProductID = NEW.ProductID AND Status = 'Pending'
  ) THEN
    SIGNAL SQLSTATE '45000'
      SET MESSAGE_TEXT = 'This product already has a pending request;
  END IF;
END;
Note: See TracWiki for help on using the wiki.