我想通过触发器更新相同的 table 的值

i want to update same table's value through trigger

columns   data_type         nullable      default
ID        VARCHAR2(30 BYTE)   No    
PASSWORD  VARCHAR2(20 BYTE)   No    
NAME      VARCHAR2(20 BYTE)   No    
BIRTH     CHAR(11 BYTE)       No    
PHONE     VARCHAR2(11 BYTE)   No    
CBD_1     VARCHAR2(20 BYTE)   Yes   
CBD_2     VARCHAR2(20 BYTE)   Yes   
CBD_3     VARCHAR2(20 BYTE)   Yes   
CBD_4     VARCHAR2(20 BYTE)   Yes   
CBD_5     VARCHAR2(20 BYTE)   Yes   
CDATE     VARCHAR2(20 BYTE)   Yes      to_char(sysdate, 'dd-Mon-YYYY') 
UDATE     VARCHAR2(20 BYTE)   Yes      to_char(sysdate, 'dd-Mon-YYYY')

我的问题是:我想在通过触发器

更新此table中的现有记录时插入更新时间

这是我的代码

create or replace trigger udate
  before update or delete on member for each row
declare
  u_id varchar2(30);
begin
  u_id := :old.id;
  update member set udate = to_char(sysdate, 'dd-Mon-YYYY') where id = u_id;
end;

错误信息

One error saving changes to table "JSP"."MEMBER":
Row 6: ORA-04091: table JSP.MEMBER is mutating, trigger/function may not see 
it
ORA-06512: at "JSP.UDATE", line 5
ORA-04088: error during execution of trigger 'JSP.UDATE'

我已经试过了:new.id但是没用

不要使用update,只需赋值:

create or replace trigger udate
  before update on member for each row
begin
  :new.udate := to_char(sysdate, 'dd-Mon-YYYY');
end;

这样做 "before delete" 没有意义,因为该行无论如何都会被删除。


您应该永远不要 将 DATE 值存储在 varchar 列中。这是一个可怕的想法。不要那样做。