【发布时间】:2021-06-19 06:06:48
【问题描述】:
我有两张桌子:
CREATE TABLE Patient
(
p_Name VARCHAR2(20) NOT NULL,
p_Surname VARCHAR2(20) NOT NULL,
idP INTEGER,
b_Date DATE NOT NULL,
d_Date DATE DEFAULT NULL,
CONSTRAINT PK_idP PRIMARY KEY(idP)
);
CREATE TABLE Visit
(
idV INTEGER,
date_V DATE NOT NULL,
v_Hospital INTEGER NOT NULL,
id_PV INTEGER,
CONSTRAINT PK_idV PRIMARY KEY(idV),
CONSTRAINT FK_idPV FOREIGN KEY(id_PV) REFERENCES Patient(idp)
ON DELETE CASCADE,
CONSTRAINT FK_idHV FOREIGN KEY(v_Hospital) REFERENCES Hospital(idH)
ON DELETE CASCADE
);
我创建了一个触发器,以便当我在表中插入一行时,如果患者已故(当然),它不应该允许我这样做,这就是它背后的逻辑。
CREATE OR REPLACE TRIGGER visitDeceased
BEFORE INSERT ON Visit
FOR EACH ROW
DECLARE
pd Patient.d_date%TYPE;
BEGIN
SELECT P.d_date INTO pd
FROM Patient P JOIN Visit V ON P.idP=:NEW.id_PV;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO Visit(date_V,v_Hospital,id_PV) VALUES(:NEW.date_V,:NEW.v_Hospital,:NEW.id_PV);
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20111,'Error. Patient deceased.');
END;
/
问题是当 d_date 为 NULL 时,代码会产生 ORA-01403: no data found 错误。我正在尝试处理该异常但不起作用。有人知道如何使它工作吗?非常感谢。
【问题讨论】:
-
您识别已故患者的标准是什么?
-
我更新了 Patient 表,在 d_date 属性中插入了一个日期(d 代表死亡)。
标签: sql oracle exception oracle11g triggers