Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 获取Oracle中已更新行的标识的最佳方法?_Database_Oracle_Plsql_Triggers_Timestamp - Fatal编程技术网

Database 获取Oracle中已更新行的标识的最佳方法?

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

在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 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;