怎么解决oracle触发器不能对本表操作问题?

时间:2021-10-22 11:02:32
例如:表A有性别字段,怎么在A中DELETE触发器中完成删除一条记录就把剩下所有记录的性别改成'男'???大虾们,来点代码。

6 个解决方案

#1



create table a(
id int,
col varchar2(3)
);
insert into a values(1,'');
insert into a values(2,'');

create or replace trigger a_del
after delete on a
begin
update a set col='男';
end;
/

delete a where id=1;
select * from a;

#2


自治事务。。。。
pragma autonomous_transaction

#3


哎,这么奇怪的需求啊,
只好用自治事务,不过不是万不得已,不要这么做。

create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;

#4




update a set sex='男' where rowid != :old.rowid;
--或者
update a set sex='男';


#5


create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;

#6


create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;

#1



create table a(
id int,
col varchar2(3)
);
insert into a values(1,'');
insert into a values(2,'');

create or replace trigger a_del
after delete on a
begin
update a set col='男';
end;
/

delete a where id=1;
select * from a;

#2


自治事务。。。。
pragma autonomous_transaction

#3


哎,这么奇怪的需求啊,
只好用自治事务,不过不是万不得已,不要这么做。

create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;

#4




update a set sex='男' where rowid != :old.rowid;
--或者
update a set sex='男';


#5


create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;

#6


create or replace trigger a_trigger
after delete on a
for each row
declare
  pragma autonomous_transaction;
begin
  update a set sex='男' where rowid != :new.rowid;
  commit;
end;