触发器出了问题,望各位给解决呀!!!!:(

fuzhong 2003-08-26 10:03:43
错误提示:游标打开超出最大数.我还想问一下这个触发器会不会死循环,怎么解决?
CREATE OR REPLACE TRIGGER "SYSTEM"."ADD_MI_PRINX" BEFORE INSERT ON "USA" FOR EACH ROW Declare
maxprinx usa.mi_prinx%type;
temp usa.mi_prinx%type;
cursor mi_cursor is select max(mi_prinx) from usa;
begin
open mi_cursoe;
fetch mi_cursor into temp;
maxprinx := temp+1;
insert into usa (mi_prinx) values(maxprinx);
commit;
close mi_cursor;
end;
...全文
40 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuzhong 2003-08-26
  • 打赏
  • 举报
回复
是这样的MI_PRINX字段是唯一的,不过 select max(mi_prinx) from usa 由于没有用group
by 分组,那么它的返回值可以肯定只有一个而且肯定有返回值(我的表已经有值)。
enhydraboy 2003-08-26
  • 打赏
  • 举报
回复
游标到尾的判断怎么没有了。
pluto74 2003-08-26
  • 打赏
  • 举报
回复
是你的游标出错了,也就是select max(mi_prinx) from usa可能查询的结果多于一条,造成这个错误。
l2g32003 2003-08-26
  • 打赏
  • 举报
回复
你的触发器写的有问题
行级触发器 不能修改 and select 变异表 --- USA
触发器会死循环
fuzhong 2003-08-26
  • 打赏
  • 举报
回复
onejune4450,你是对的,我没注意。问题解决了。
我的意思是,在插入一条记录时(mi_prinx是没有值的),该纪录的mi_prinx值用触发器加入。
onejune4450 2003-08-26
  • 打赏
  • 举报
回复
相应的字段要如何变化?
incats 2003-08-26
  • 打赏
  • 举报
回复
用序列号不好么?
new.miprinx := myseq.nextval;
fuzhong 2003-08-26
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER "SYSTEM"."ADD_MI_PRINX" BEFORE INSERT ON "USA" FOR EACH ROW Declare
begin
select max(mi_prinx)+1 into :new.mi_prinx from usa
end;
按照这么做:mi_prinx的值是有了,不过相应的字段没有变化
fuzhong 2003-08-26
  • 打赏
  • 举报
回复
我试了,还是存在问题。这样吧,我把问题说的详细点
假设现在表usa中有三个字短,分别是:mi_prinx , name ,area.现在想做一个触发器
在我增加一条纪录时mi_prinx的值自动增加为最大值,也就是说mi_prinx是自动增加的
根据这些 ,我写了以上的触发器。但是出错.
sanoul 2003-08-26
  • 打赏
  • 举报
回复
首先你这个是变异表,也就是触发器本身对自己在进行操作,其次操作本身在不停的调用触发器,然后不停的插入usa表,然后又触发,显然是个死循环
onejune4450 2003-08-26
  • 打赏
  • 举报
回复
显然是一个死循环。
如果你希望插入新记录时mi_prinx的值比表中其最大值+1,可以写成:
CREATE OR REPLACE TRIGGER "SYSTEM"."ADD_MI_PRINX" BEFORE INSERT ON "USA" FOR EACH ROW Declare
begin
select max(mi_prinx)+1 into :new.mi_prinx from usa
end;

17,078

社区成员

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

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