根据 table 中的实例数限制数据输入
Limit data input based on count of instances in table
甲骨文 12c.
我目前有一个 table 来保存包含医生 ID、患者 ID 和 data/time 访问的患者访问。
我想创建一个约束,在输入数据时检查特定医生在给定日期是否有 5 个预约。如果医生确实有5个预约,则不能添加额外的预约。
除了使用存储过程输入外,还有什么方法可以做到这一点吗?
如果我要使用存储过程(而不是触发器由于声明变量的问题)我收到以下错误:错误(4,8):PLS-00103:遇到符号"UPDATE"当期待以下之一时: := 。 ( @ % ; 不是 null 范围默认字符
我不确定这是否是因为我无法对过程使用更新前。有什么想法吗?
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;
Go with trigger. Probably the best solution in this scenario.
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;
甲骨文 12c.
我目前有一个 table 来保存包含医生 ID、患者 ID 和 data/time 访问的患者访问。
我想创建一个约束,在输入数据时检查特定医生在给定日期是否有 5 个预约。如果医生确实有5个预约,则不能添加额外的预约。
除了使用存储过程输入外,还有什么方法可以做到这一点吗?
如果我要使用存储过程(而不是触发器由于声明变量的问题)我收到以下错误:错误(4,8):PLS-00103:遇到符号"UPDATE"当期待以下之一时: := 。 ( @ % ; 不是 null 范围默认字符
我不确定这是否是因为我无法对过程使用更新前。有什么想法吗?
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;
Go with trigger. Probably the best solution in this scenario.
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;