如何在oracle 9i中创建last_modified字段?

时间:2012-07-24 08:58:26

标签: oracle

我正在使用Oracle 10g Express或Oracle XE。在EMPLOYEES表中,我想添加另一个列调用last_modified,如果它已被修改,它将自动生成当前日期或日期/时间。我知道有这个rowscn(时间戳)的东西只能从oracle 10g开始提供,但我想手动创建一个,因为我的客户端使用的是oracle 9i,但我只有10g才能进行测试。我也从来没有使用过oracle。这适用于Lotus Notes的某些集成项目。因此,如果可能,我希望LotusScript可以识别日期或日期/时间。

2 个答案:

答案 0 :(得分:1)

向表中添加TIMESTAMP类型的列(可能在不支持的9i版本中可用,但之后只需使用DATE)。

alter table employees add (modified_at timestamp);

然后创建一个在更新时触发的触发器,它只是将该列设置为sysdate:

create or replace trigger update_modified
  before update on employees
  for each row
begin
  :new.modified_at := sysdate;
end;
/    

答案 1 :(得分:1)

通常的方法是

  • 在表格中添加modify_date / modified_by列
  • 创建一个触发器,只要修改了行,就会更新此列

示例:

  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;