日期:2014-05-17  浏览次数:20991 次

触发器建好了,怎么插入的时候报错了???

--表结构
create table Categorys
(
id nvarchar2(50) not null,
companyid nvarchar(50),
categoryname nvarchar2(50)
)
--触发器
create or replace trigger tri_Category
  after insert on categorys  
  for each row
begin
  delete categorys where categoryname is null;
end tri_Category;

执行这条语句报错
insert into categorys(ID,COMPANYID) values('11','11');

错误提示为:

ORA-04091: 表 CATEGORYS 发生了变化, 触发器/函数不能读它
ORA-06512: 在 "TRI_CATEGORY", line 2
ORA-04088: 触发器 'TRI_CATEGORY' 执行过程中出错

我是想控制输入类别名称为空后,删除类别名称为空的记录,为什么执行不了触发器?
------解决方案--------------------
逻辑就错了当然错。触发器里的删除和你的添加是同一事务内的,典型的脏读。
------解决方案--------------------
create or replace trigger tri_Category
  after insert on categorys
begin
  delete categorys where categoryname is null;
end tri_Category;
去掉for each row试试
------解决方案--------------------
就是,触发器的触发动作(增、删、改)不能是原表!除非用自治事务!