Database 获取Oracle中已更新行的标识的最佳方法?
在Oracle中获取已更新行标识的最佳方法是什么?我正在尝试编写一个触发器,它能够更新Customer表中每个更新行中的timestamp字段 我的桌子:Database 获取Oracle中已更新行的标识的最佳方法?,database,oracle,plsql,triggers,timestamp,Database,Oracle,Plsql,Triggers,Timestamp,在Oracle中获取已更新行标识的最佳方法是什么?我正在尝试编写一个触发器,它能够更新Customer表中每个更新行中的timestamp字段 我的桌子: CREATE TABLE CUSTOMER ( ID NUMBER NOT NULL , LASTNAME NVARCHAR2(20) , FIRSTNAME NVARCHAR2(20) , UPDATETS TIMESTAMP(30) NOT NULL , UPDATEUSER VARCHAR2(30 BYTE) NOT NU
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):
有人能帮我解决这个问题吗?谢谢:)在触发之前,您需要一个
,只需修改:new
伪记录中的属性即可
CREATE OR REPLACE TRIGGER UPDATETS_REG_TRG
BEFORE UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
:new.updateTS := systimestamp;
:new.updateUser := user;
END;
@sead4711-是的。对于更新的每一行,触发器被调用一次(至少)。您对:new
伪记录所做的修改仅针对这一行。谢谢Justin:)这是完美的答案:)
CREATE OR REPLACE TRIGGER UPDATETS_REG_TRG
BEFORE UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
:new.updateTS := systimestamp;
:new.updateUser := user;
END;