私は大学の科目用に小規模なプロジェクトを作成していますが、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
によってテーブルの行が変更され、同じ行が2つあるたびに、トリガーで単純なメッセージをテーブルに書き込む必要があります。INSERT
UPDATE
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;
このトリガーにより、「Mutating Table」エラーが発生し、これまでのところ修正できませんでした。:OLD.ROOM_ID
代わりに使用すると、操作の際に存在しないためROOM_ID
失敗します。この作品を作る上でのアドバイスは大歓迎です。:OLD.ROOM_ID
UPDATE