在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
有人可以帮我解决这个问题吗?谢谢:))
答案 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;