当前位置: 代码迷 >> Oracle开发 >> Oracle 判断游标回到记录是否为空
  详细解决方案

Oracle 判断游标回到记录是否为空

热度:51   发布时间:2016-04-24 06:37:11.0
Oracle 判断游标返回记录是否为空
先解释一下要实现的功能:随机生成一个1-30之间的整数,然后判断该数是否在数据表中存在,如存在,则重新生成;如不存在,则执行insert操作。代码如下:
while numRowCount < 10 loop
   numRand := TRUNC(dbms_random.value(1,30),0);
   --根据得出的随机数,从表中查询结果
   open curRand for select midRand from dc_middle_rand where midRand = numRand;
     --当查询结果为 0(无相关记录),则进行插入操作
     if curRand%notfound then  --这种判断,程序进入死循环,IF内的代码并未执行(!!!)
      --if curRand%rowcount = 0 then --这种判断也失效(!!!)
        EXECUTE IMMEDIATE 'Insert into dc_middle_rand values('|| numRand ||')';
        commit;
        numRowCount := numRowCount + 1;
     end if;
   close curRand;
end Loop;

问题: 本人试过利用 if curRand%notfound then 和 if curRand%rowcount = 0 then两种判断,都无法生效;
1、if curRand%notfound then:这种判断,执行时进入死循环,IF内部代码从未被执行。
2、 if curRand%rowcount = 0 then:这种判断并未生效,经常在结果中查出重复的记录。比如表中已经存在数字8,在第二次循环判断时,数字8 仍然会被insert。

请各位大神帮忙。重赏
------解决方案--------------------
缺少fetch into语句
fetch into 完成之后才能通过 if curRand%notfound then判断
------解决方案--------------------
这个按说用不到游标的
while numRowCount < 10 loop
   numRand := TRUNC(dbms_random.value(1,30),0);
   select count(1) into i from dc_middle_rand where midRand = numRand;
   if i=0 then
        EXECUTE IMMEDIATE 'Insert into dc_middle_rand values('
------解决方案--------------------
 numRand 
------解决方案--------------------
')';
        commit;
        numRowCount := numRowCount + 1;
     end if;
end Loop;
  相关解决方案