Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在oracle 9i中创建上次修改的字段?_Oracle - Fatal编程技术网

如何在oracle 9i中创建上次修改的字段?

如何在oracle 9i中创建上次修改的字段?,oracle,Oracle,我正在使用Oracle 10g Express或Oracle XE。在EMPLOYEES表中,我想添加另一个列call last_modified,如果它已被修改,它将自动生成当前日期或日期/时间。我知道rowscn(时间戳)只在oracle 10g以后可用,但我想手动创建一个,因为我的客户机使用oracle 9i,但我只有10g来进行测试。而且我以前从未使用过oracle。这是针对一些与LotusNotes集成的项目。因此,如果可能的话,我希望日期或日期/时间能够被LotusScript识别。

我正在使用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;