首先,我不是数据库人。刚刚进入学习阶段。我们考虑一个名为 Accounts
的表格。它有四列,如下所述。
---------------------------------------------
| PK | AcType | FName | LName | Zip |
---------------------------------------------
| 1 | Savings | AAA | ZZZ | 11111 |
| 2 | Checking | BBB | YYY | 22222 |
| 3 | Checking | CCC | XXX | 33333 |
---------------------------------------------
我们如何确定表中是否更改了值?
(可能是单个更改或多个更改)
例如:
---------------------------------------------
| PK | AcType | FName | LName | Zip |
---------------------------------------------
| 1 | Savings | AAA | ZZZ | 11111 |
| 2 | Savings | BBB | YYY | 22222 |
| 3 | Checking | CCC | XXX | 33333 |
---------------------------------------------
我们可以看到第二行的 AcType
中的数据已更改为 Savings
。
我们如何实施触发器以确定表格的任何字段中是否存在更改({1}},INSERT
,DELETE
)?
答案 0 :(得分:1)
如果你的确意味着你需要知道表格的任何变化,你可以这样做:
CREATE or REPLACE TRIGGER AccountsChanged
AFTER INSERT OR DELETE OR UPDATE ON Accounts
BEGIN
doWhatEverYouNeed;
END;
doWhatEverYouNeed是你的程序在修改表后采取行动
然而,即使值不会改变,它也会在任何更新时触发 如果只需要更改某个值时需要触发,则需要使用以下内容:
CREATE or REPLACE TRIGGER AccountsChanged
AFTER INSERT OR DELETE OR UPDATE ON Accounts
FOR EACH ROW
BEGIN
if updating
then
IF :NEW.AcType <> :OLD.AcType or :NEW.FName <> :OLD.FName or :NEW.LName <> :OLD.LName or :NEW.Zip <> :OLD.Zip
then
doWhatEverYouNeed;
end if;
else
doWhatEverYouNeed;
end if;
END;
答案 1 :(得分:1)
CREATE or REPLACE TRIGGER AccountsChanged
AFTER INSERT OR DELETE OR UPDATE ON Accounts
BEGIN
insert into change_log_table(change_time, what_changed, change_status) values (sysdate, 'Accounts', 'TRUE')
END;
您还可以识别操作
CREATE or REPLACE TRIGGER AccountsChanged
AFTER INSERT OR DELETE OR UPDATE ON Accounts
DECLARE
action_type varchar2(1);
BEGIN
if inserting then action_type := 'I' end if;
if updating then action_type := 'U' end if;
if deleting then action_type := 'D' end if;
insert into change_log_table(change_time, what_changed, change_status, action_type)
values (sysdate, 'Accounts', 'TRUE', action_type)
END;