【发布时间】:2015-01-29 04:38:35
【问题描述】:
我正在为我的大学科目制作一个小项目,但在为我的小型数据库在 Oracle SQL Developer 中设计触发器时遇到了问题。
我有以下表格:
create table ASSIGNED_TO(
ASSIGNMENT_ID int not null primary key,
ROOM_ID int not null,
foreign key (ROOM_ID) references ROOM(ROOM_ID),
NURSE_ID int not null,
foreign key (NURSE_ID) references NURSE(PERSON_ID)
);
create table MESSAGE_LOG(
ID int not null,
MESSAGE varchar2(100) null
);
每次ASSIGNED_TO 表中的一行被INSERT 或UPDATE 操作更改并且有2 行具有相同的ROOM_ID 我希望触发器将一条简单消息写入MESSAGE_LOG 表。
导致我出现问题的是表ASSIGNED_TO 的“变异”。我目前的解决方案是:
create or replace TRIGGER TRIG3
AFTER INSERT OR UPDATE
ON ASSIGNED_TO
FOR EACH ROW
DECLARE
nr_nurses INTEGER;
BEGIN
SELECT COUNT(*) INTO nr_nurses
FROM ASSIGNED_TO
WHERE ROOM_ID = :NEW.ROOM_ID;
IF nr_nurses >= 2 THEN
INSERT INTO MESSAGE_LOG values (3, '2 or more nurses per room detected');
DBMS_OUTPUT.PUT_LINE('3| 2 or more nurses per room detected');
END IF;
END;
这个触发器给了我“变异表”错误,到目前为止我一直无法修复它。使用:OLD.ROOM_ID 而不是ROOM_ID 失败,因为:OLD.ROOM_ID 在UPDATE 操作的情况下不存在。任何有关使这项工作的建议表示赞赏。
【问题讨论】:
标签: sql oracle database-trigger