我正在为我的大学科目制作一个小项目,但在为我的小型数据库设计 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
orUPDATE
操作更改并且有 2 行相同时,ROOM_ID
我希望触发器将一条简单的消息写入MESSAGE_LOG
表中。
引起我问题的是 table 的“变异” 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
。任何有关使这项工作的建议表示赞赏。