2014-06-24 50 views
0

在Oracle中獲取更新行的身份的最佳方式是什麼?我正在嘗試編寫一個觸發器,它能夠更新表Customer中每個更新行中的時間戳字段。在Oracle中獲取更新行的身份的最佳方法是什麼?

我的表:

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

你需要一個before觸發,你只希望修改屬性的:new pseudorecord

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

僅僅是更新的行影響? – sead4711

+0

@ sead4711 - 是的。對於更新的每一行,觸發器都會被調用一次(至少)。你對':new'的僞碼進行的修改只適用於這一行。 –

+0

謝謝賈斯汀:)那是完美的回答:) – sead4711

相關問題