【发布时间】:2014-06-07 01:37:33
【问题描述】:
我在学术作业中使用 Oracle 11gR2。有一个限制,一个房间必须有 3 - 5 人。我知道我可以编写这样的触发器来检查房间是否超过 5 人:
CREATE TABLE People
(
PID INTEGER PRIMARY KEY
);
CREATE TABLE Room
(
RID INTEGER PRIMARY KEY
);
CREATE TABLE Living
(
RID INTEGER,
PID INTEGER,
CONSTRAINT Living_PK PRIMARY KEY (RID, PID),
CONSTRAINT Living_FK_RID FOREIGN KEY (RID) REFERENCES Room(RID),
CONSTRAINT Living_FK_PID FOREIGN KEY (PID) REFERENCES People(PID)
);
CREATE OR REPLACE TRIGGER Living_BIU
BEFORE INSERT OR UPDATE ON Living
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
Count NUMBER;
BEGIN
SELECT COUNT(*)
INTO Count
FROM Living
WHERE RID = :NEW.RID;
IF(Count > 5)
THEN
RAISE_APPLICATION_ERROR(-20002, 'Too many people in a room.');
END IF;
END Living_BI;
但我无法检查数字是否小于 3,因为这样我就无法在 Living 中插入任何东西。所以我的问题是如何创建一个触发器来强制用户一次插入多于 3 行且少于 5 行?
【问题讨论】:
标签: sql oracle triggers oracle-sqldeveloper