【问题标题】:Best way to get identity of updated row in Oracle?在 Oracle 中获取更新行标识的最佳方法?
【发布时间】:2014-08-15 01:07:22
【问题描述】:

在 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

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

【问题讨论】:

    标签: database oracle plsql triggers timestamp


    【解决方案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;
    

    【讨论】:

    • @sead4711 - 是的。对于更新的每一行,触发器被调用一次(至少)。您对:new 伪记录所做的修改仅针对那一行。
    • 谢谢贾斯汀 :) 那是完美的答案 :)
    猜你喜欢
    • 2010-09-07
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多