oracle删除触发子(for each row)

xxj 2000-07-04 02:10:00
我有一个表A
ID
1
2
21
22
221
223
3
31
311
32
33
331
现在我删除ID号为2的记录,要求作一触发子能删除ID号以2开头的所有记录。
我所做的触发子如下:
create or replace trigger t_del_forum
after delete on forum
for each row
declare
ls_id varchar2(32);
begin
ls_id:=:old.id;
delete from forum where id like ls_id+'%' and id<>ls_id;
end t_del_forum;

但在执行:
delete from A where id='2'时会报告如下错误:
ORA-04091: 表ME.FORUM发生了变化,触发器/函数不能读
ORA-06512: 在"ME.T_DEL_FORUM", line 5
ORA-04088: 触发器'ME.T_DEL_FORUM'执行过程中出错!

希望ORACLE 数据库高手能给我回答




...全文
327 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
brlee 2000-07-31
  • 打赏
  • 举报
回复
可以运用存储过程解决次问题
xxj 2000-07-09
  • 打赏
  • 举报
回复
我为自己感到悲哀,同时也为ORACLE感到悲哀,连这样的小问踢都解决不了。
guofupei 2000-07-09
  • 打赏
  • 举报
回复
jhc's 办法也不行



guofupei 2000-07-09
  • 打赏
  • 举报
回复
028-3438412
u question is too difficult !
jhc 2000-07-08
  • 打赏
  • 举报
回复
在触发器中不能访问本表的记录,无论你怎样修改都是没有作用的

建议你把表分成两个,主表和从表
guofupei 2000-07-04
  • 打赏
  • 举报
回复
this trigger may cause rollback segment not enough is u dbrs is small;
guofupei 2000-07-04
  • 打赏
  • 举报
回复
follow some change of ur trigger


create or replace trigger t_del_forum
after delete on forum
for each row
declare
ls_id varchar2(32);
begin
ls_id:=:old.id;
if length(ls_id)=1 exit;
else
delete from forum where id like ls_id+'%' and id<>ls_id;
endif;
end t_del_forum;
guofupei 2000-07-04
  • 打赏
  • 举报
回复
when delete 2
u delete 2*
but 2 belong 2*
so u can't delete 2;

u can change u trigger!
xxj 2000-07-04
  • 打赏
  • 举报
回复
我已经加了commit;但还是不行。你可以用其他办法,但必须是使用删除触发子的办法。
pzrjl 2000-07-04
  • 打赏
  • 举报
回复
你的触发器在delete 语句执行后触发,而你的DELETE 语句也是删除相同条件的记录.所以有问题.
你可以改变触发时机,或在触法器内首先执行COMMIT 语句,试试看吧

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧