[英]How do I correctly compare values across tables with triggers? (PL-SQL)
我目前無法在 Oracle SQL 中使用觸發器。 我正在嘗試跨表比較值。 更具體地說,我想查看某個日期是否大於/晚於另一個日期,根據結果,可能會發生錯誤,即項目預算輸入日期不能早於項目的開始日期。
我有兩個相關的表。
項目: https : //i.imgur.com/MC7yPZT.png
預算: https : //i.imgur.com/HGJ6oLy.png
這是我的觸發器:
-- check legality of budget date
CREATE OR REPLACE TRIGGER trg_budget_date
BEFORE UPDATE OF budget_date ON budget
FOR EACH ROW
DECLARE var_project_start DATE;
BEGIN
SELECT project.project_start
INTO var_project_start
FROM project
WHERE project.project_id = :new.project_id;
IF :new.budget_date > var_project_start THEN
RAISE_APPLICATION_ERROR(-20000, 'Budget made before project start.');
END IF;
END;
/
為了展示我的觸發器如何不起作用,我將首先解釋我如何測試它。
SELECT project_id, project_start
FROM project
WHERE project_id = '8';
結果是 15-SEP-18。 現在讓我們嘗試在開始日期之前插入預算,比如 13-SEP-18。
INSERT INTO budget VALUES (8, 9000, '13-SEP-18', 4);
運行這兩個命令后,結果如下:
https://i.imgur.com/cWjrIMv.png
如您所見,它似乎根本不起作用。 項目 (8) 的預算被添加,就好像觸發器根本不起作用一樣。
如果有人能看到問題,請指出正確的方向,我將不勝感激。 非常感謝您的閱讀和您的時間。
也許我錯過了一些東西,但對我來說這似乎很簡單。 您的觸發器僅在更新之前運行,您還應該添加 BEFORE INSERT。 檢查以下模式:
CREATE [ OR REPLACE ] TRIGGER trigger_name
BEFORE INSERT or UPDATE or DELETE
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.