我想通过触发器更新相同的 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
列中。这是一个可怕的想法。不要那样做。
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
列中。这是一个可怕的想法。不要那样做。