在Oracle中获取更新行标识的最佳方法是什么?

时间:2014-06-24 16:54:25

标签: database oracle plsql triggers timestamp

在Oracle中获取更新行标识的最佳方法是什么?我正在尝试编写一个触发器,它能够更新表Customer中每个更新行中的时间戳字段。

我的桌子:

CREATE TABLE CUSTOMER 
(
  ID NUMBER NOT NULL 
, LASTNAME NVARCHAR2(20) 
, FIRSTNAME NVARCHAR2(20) 
, UPDATETS TIMESTAMP(30) NOT NULL 
, UPDATEUSER VARCHAR2(30 BYTE) NOT NULL 
, CONSTRAINT CUSTOMER_PK PRIMARY KEY 
(
    ID 
  )
);

我的触发器:

CREATE OR REPLACE TRIGGER UPDATETS_REG_TRG 
AFTER UPDATE ON CUSTOMER 
REFERENCING OLD AS oldAlias
FOR EACH ROW 
BEGIN
  if updating then
    update CUSTOMER 
      set UPDATETS = SYSTIMESTAMP, UPDATEUSER = User where CUSTOMER.ID = oldAlias.ROWID ;
  end if;    
END;

我收到此错误:Fehler(8,78):

PL/SQL: ORA-00904: "OLDALIAS"."ROWID": invalid identifier

有人可以帮我解决这个问题吗?谢谢:))

1 个答案:

答案 0 :(得分:1)

您需要before触发器,而您只需修改:new伪记录中的属性

CREATE OR REPLACE TRIGGER UPDATETS_REG_TRG 
  BEFORE UPDATE ON CUSTOMER 
  FOR EACH ROW 
BEGIN
  :new.updateTS := systimestamp;
  :new.updateUser := user;
END;