Oracle SQL 视图触发器

Oracle SQL Trigger for View

我在使用视图上的 SQL 触发器时遇到问题。我有一个名为 Absence 的 table,如下所示:

CREATE TABLE Absence
(
 absence_id_pk varchar(6) NOT NULL,
 staff_id_fk varchar(6),
 start_date date,
 end_date date,
 reason varchar(30),
 PRIMARY KEY (absence_id_pk),
 FOREIGN KEY (staff_id_fk) REFERENCES Full_Time_Employee(staff_id_fk)
);

记录员工缺勤时间。

问题来了!我想创建一个触发器,当 一名员工的缺勤总天数大于 20 时,它会向 DBMS 发送消息,例如哎呀!这名员工请了太多病假。实际上,它可能会根据一段时间进行检查,例如在过去 6 个月内,但这并不需要那么复杂。仅在将新记录插入 Absence table.

时缺勤总天数超过 20 天

阅读了一些评论后,我制作了这个新触发器:

create or replace TRIGGER absence_check
BEFORE INSERT
ON absence
FOR EACH ROW
DECLARE
staffid absence.staff_id_fk%TYPE;
days number;
BEGIN
SELECT SUM(end_date - start_date) INTO days
FROM absence
WHERE staff_id_fk = staffid;
IF days > 20
THEN
DBMS_OUTPUT.PUT_LINE('Total days absent are more than 20' || staffid);
END IF;
END;

任何 advice/guidance/solutions 将不胜感激!如果消息能打印出刚刚违反 > 20 天缺席规则的 staff_id_fk,那就更好了。

P.S。我是一名大学生,虽然这可以通过其他方式实现,但我们被要求尝试为我们的数据库场景创建触发器!

create or replace TRIGGER absence_check
BEFORE INSERT
ON absence
FOR EACH ROW
DECLARE
staffid absence.staff_id_fk%TYPE := :NEW.staff_id_fk;
days number;
BEGIN
SELECT SUM(end_date - start_date) INTO days
FROM Absence, Staff 
WHERE Absence.staff_id_fk = staffid;
IF days > 20
THEN
DBMS_OUTPUT.PUT_LINE('Warning: Total number of days absent is more than 20 for staff member: ' || staffid);
END IF;
END;

感谢大家的帮助和建议。当你终于解决了一个问题时感觉很棒,通过在你的帮助下探索这个问题,我学到了很多关于触发器的知识。