Oracle 12c。根據表中實例的數量限制數據輸入
我目前有一個表格來存放包含醫師ID,患者ID和訪問數據/時間的患者訪問。
我想創建一個約束條件,在輸入數據時,檢查特定醫生是否在該給定日期有5個約會。如果醫生確實有5次預約,則不能再增加預約。
除了使用存儲過程進行登錄之外,是否有任何方法可以執行此操作?我得到以下錯誤:錯誤(4,8):PLS-00103:在遇到一個時出現符號「UPDATE」。如果我使用存儲過程(而不是觸發器到期問題聲明一個變量)以下::=。 (@%;?不空範圍默認字符
我不能確定這是否是因爲我無法在程序使用BEFORE更新任何想法
CREATE OR REPLACE PROCEDURE doc_apt_limit_5
IS
v_visit_count
BEFORE UPDATE OR INSERT ON aa_patient_visit
FOR EACH ROW
BEGIN
SELECT (COUNT(*)) INTO v_visit_count
FROM aa_patient_visit
WHERE physid = :NEW.physid
GROUP BY physid, visittime;
IF v_visit_count > 4 THEN
RAISE_APPLICATION_ERROR(-20001, 'physician is fully booked on this date');
END IF;
END;
觸發似乎一個自然的解決方案,但它基本上是相同的想法 –
我認爲這可能是一個最佳途徑..我試圖用一個過程來做,因爲我有問題用我的觸發器聲明一個變量,但是收到一個錯誤。添加到我原來的帖子。 謝謝增益 – Ian
之前(或之後)僅適用於觸發器,而不適用於過程。在觸發器中聲明變量不是問題。雖然嘗試強制執行這種約束是因爲併發(兩個插入/更新同時不能看到對方),除非您以某種方式進行串行化,並對錶問題進行變異。無論如何,這似乎是一個奇怪的約束 - 約會的數量,而不是填補的預約位。 –