Oracle 12c。
我目前有一张桌子可以容纳患者就诊,其中包含医生ID,患者身份证和数据/访问时间。
我想创建一个约束,在数据输入时,检查特定医生在该指定日期是否有5次约会。如果医生确实有5次预约,则不能再增加预约。
除了使用存储过程进行输入之外,还有什么方法可以做到这一点吗?
如果我要使用存储过程(而不是因为声明变量而触发的问题)我收到以下错误:错误(4,8):PLS-00103:当期待其中一个时遇到符号“UPDATE”以下:: =。 (@%;非空范围默认字符
我不确定这是因为我不能在程序上使用BEFORE UPDATE。有什么想法吗?
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;
答案 0 :(得分:0)
使用触发器。可能是这种情况下的最佳解决方案。
CREATE OR REPLACE TRIGGER doc_apt_limit_5 BEFORE
UPDATE OR
INSERT ON aa_patient_visit FOR EACH ROW
DECLARE v_visit_count PLS_INTEGER;
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;