251117:1700 first commit
This commit is contained in:
47
docs/SQL/triggers.sql
Normal file
47
docs/SQL/triggers.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
-- trigger
|
||||
DROP TRIGGER IF EXISTS trg_rfa_revisions_is_current;
|
||||
DROP TRIGGER IF EXISTS trg_rfa_revisions_is_current_upd;
|
||||
DROP TRIGGER IF EXISTS trg_rfa_revisions_auto_reset;
|
||||
-- ============================================================
|
||||
-- ⚙️ TRIGGERS
|
||||
-- ============================================================
|
||||
-- ป้องกันไม่ให้มี revision ที่ is_current=TRUE ซ้ำใน rfa_id เดียวกัน
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_rfa_revisions_is_current
|
||||
BEFORE INSERT ON rfa_revisions
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.is_current = TRUE THEN
|
||||
IF (SELECT COUNT(*) FROM rfa_revisions WHERE rfa_id = NEW.rfa_id AND is_current = TRUE) > 0 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'Cannot insert more than one current revision per RFA.';
|
||||
END IF;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_rfa_revisions_is_current_upd
|
||||
BEFORE UPDATE ON rfa_revisions
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.is_current = TRUE AND (OLD.is_current IS NULL OR OLD.is_current = FALSE) THEN
|
||||
IF (SELECT COUNT(*) FROM rfa_revisions WHERE rfa_id = NEW.rfa_id AND is_current = TRUE AND correspondences_id <> OLD.correspondences_id) > 0 THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = 'Cannot set more than one current revision per RFA.';
|
||||
END IF;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
-- ทำให้เวลาสร้าง revision ใหม่ที่ is_current=TRUE ระบบจะ set revision เดิมเป็น FALSE อัตโนมัติ
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_rfa_revisions_auto_reset
|
||||
BEFORE INSERT ON rfa_revisions
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
IF NEW.is_current = TRUE THEN
|
||||
UPDATE rfa_revisions
|
||||
SET is_current = FALSE
|
||||
WHERE rfa_id = NEW.rfa_id;
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user