如何在oracle 9i中创建上次修改的字段?
我正在使用Oracle 10g Express或Oracle XE。在EMPLOYEES表中,我想添加另一个列call last_modified,如果它已被修改,它将自动生成当前日期或日期/时间。我知道rowscn(时间戳)只在oracle 10g以后可用,但我想手动创建一个,因为我的客户机使用oracle 9i,但我只有10g来进行测试。而且我以前从未使用过oracle。这是针对一些与LotusNotes集成的项目。因此,如果可能的话,我希望日期或日期/时间能够被LotusScript识别。在表中添加一个如何在oracle 9i中创建上次修改的字段?,oracle,Oracle,我正在使用Oracle 10g Express或Oracle XE。在EMPLOYEES表中,我想添加另一个列call last_modified,如果它已被修改,它将自动生成当前日期或日期/时间。我知道rowscn(时间戳)只在oracle 10g以后可用,但我想手动创建一个,因为我的客户机使用oracle 9i,但我只有10g来进行测试。而且我以前从未使用过oracle。这是针对一些与LotusNotes集成的项目。因此,如果可能的话,我希望日期或日期/时间能够被LotusScript识别。
TIMESTAMP
类型的列(在不受支持的9i版本中可能不可用,但只需使用date
)
然后创建一个在更新时触发的触发器,只需将该列设置为sysdate:
create or replace trigger update_modified
before update on employees
for each row
begin
:new.modified_at := sysdate;
end;
/
通常的方法是
- 将“修改日期/修改方式”列添加到表中
- 创建一个触发器,在修改行时更新此列
CREATE OR REPLACE TRIGGER TR_AUD_EMPLOYEE
BEFORE INSERT OR UPDATE OR DELETE ON EMPLOYEE
FOR EACH ROW
begin
if UPDATING then
:new.MODIFIED_BY := user;
:new.MODIFY_DATE := sysdate;
end if;
end;
如果您只在更新时执行删除或插入操作,则无需触发该触发器。这是真的-它只是我们使用的审核触发器模板的摘录(我们在更新/删除时插入审核记录)。这可能会让完全不熟悉触发器的人感到困惑。
CREATE OR REPLACE TRIGGER TR_AUD_EMPLOYEE
BEFORE INSERT OR UPDATE OR DELETE ON EMPLOYEE
FOR EACH ROW
begin
if UPDATING then
:new.MODIFIED_BY := user;
:new.MODIFY_DATE := sysdate;
end if;
end;