簡體   English   中英

適用於View的Oracle SQL觸發器

[英]Oracle SQL Trigger for View

我在View上遇到SQL觸發器問題。 我有一張名為Absence的表,如下所示:

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發送一條消息,例如Eek! 這名工作人員正在休病假。 實際上,它可能會在一段時間內進行檢查,例如在過去的6個月內,但這不需要那么復雜。 簡單地說,當將新記錄插入缺勤表時,缺席期總數超過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;

任何建議/指導/解決方案將不勝感激! 如果消息可以打印出剛違反> 20天缺席規則的staff_id_fk,那將是一個獎勵。

PS我是一名大學生,雖然這可能以其他方式實施,但我們被要求嘗試為我們的數據庫場景創建觸發器!

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;

感謝大家的幫助和建議。 當你最終解決問題時我感覺很棒,而且我通過在你的幫助下探索這個問題我已經學到了很多關於觸發器的知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM