根据表中的实例计数限制数据输入



Oracle 12c.

我目前有一个表格来保存患者就诊,其中包含医生 ID、患者 ID 和数据/就诊时间。

我想创建一个约束,在数据输入时,检查特定医生在该给定日期是否有 5 次预约。如果医生确实有 5 次预约,则不能添加额外的预约。

除了使用存储过程进行输入之外,还有什么方法可以做到这一点吗?

如果我使用存储过程(而不是由于声明变量的问题而导致的触发器),我会收到以下错误:错误(4,8):PLS-00103:预期出现以下情况之一时遇到符号"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;

使用触发器。在这种情况下可能是最好的解决方案。

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;

相关内容

  • 没有找到相关文章

最新更新