这个触发器,不知道为什么出错,急

aben213 2004-11-16 04:03:01
表名为da
数据为: id xh
212 1
343 2
433 3
542 4
触发器功能为:删除记录后,表中xh保持连续。
我的代码为:
create or replace trigger da_delete
after delete on da
for each row
begin
update da set xh=xh-1 where id=:old.id and xh>:old.xh;
end da_delete;

代码编译通过,但我删除一条记录时,触发器报错。错误语句就是那条update语句。

我找不到错误原因,请高手指点,多谢。

...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lialin 2004-11-17
  • 打赏
  • 举报
回复
你可以在程序调用完成后进行这样一个操作,即可以写一个删除该表记录的存储过程,删除该表的记录时调用这个过程进行删除,不要直接进行删除就可以了!还可以在触发时先写到一个临时表中,然后设置一个job进行循环处理,都不是非常的方便!
aben213 2004-11-17
  • 打赏
  • 举报
回复
那该怎么实现呢,谁能给我代码。
lialin 2004-11-16
  • 打赏
  • 举报
回复
触发器不能再对自己进行操作,因为此时表是一个变异的表,只能通过其他的途径来处理!
就是在触发器中进行select也不行!这是一个比较烦的问题!
skystar99047 2004-11-16
  • 打赏
  • 举报
回复
语句改成 update da set xh=xh肯定不用看都知道会出错。
xh是不是主键?
create or replace trigger da_delete
after delete on da
for each row
begin
update da set xh=xh-1 where xh>:old.xh;
end da_delete;
aben213 2004-11-16
  • 打赏
  • 举报
回复
即使是把语句改成 update da set xh=xh
还是出错,错误信息一样。
skystar99047 2004-11-16
  • 打赏
  • 举报
回复
这样怎么样?
create or replace trigger da_delete
before delete on da
for each row
begin
update da set xh=xh-1 where xh>:old.xh;
end da_delete;
aben213 2004-11-16
  • 打赏
  • 举报
回复
改成before 也不行,同样的错误。
错误信息:
ORA-04091:表da 发生了变化,触发器/函数不能读
ORA-06512:在"da_delete",line 2
ORA-04088:触发器'da_dalete'执行过程中出错
bluelamb 2004-11-16
  • 打赏
  • 举报
回复
都delete了怎么update,当然是再delete前update了
create or replace trigger da_delete
before delete on da
for each row
begin
update da set xh=xh-1 where id=:old.id and xh>:old.xh;
end da_delete;
LGQDUCKY 2004-11-16
  • 打赏
  • 举报
回复
try:

create or replace trigger da_delete
before delete on da
for each row
begin
update da set xh=xh-1 where id=:old.id and xh>:old.xh;
end da_delete;

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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