免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2175 | 回复: 6
打印 上一主题 下一主题

[数据库] oralce循环问题,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-27 16:15 |只看该作者 |倒序浏览
declare
cursor c1 is select view_name from all_views where rownum <=10 order by view_name;
vname varchar2(40);
begin
open c1;
fetch c1 into vname;
while c1%FOUND LOOP
DBMS_OUTPUT.put_LINE(vname);
END LOOP;
CLOSE c1;
END;

为什么查询出来的结果,进入死循环了呢,结果如下:

JAVASNM
JAVASNM
JAVASNM
JAVASNM
JAVASNM
JAVASNM
JAVASNM
.............


查询出来的结果应该是下面的结果的,
SQL> select view_name from all_views where rownum <=10 order by view_name;

VIEW_NAME
------------------------------
JAVASNM
KU$_10_1_AUDIT_VIEW
KU$_10_1_COMMENT_VIEW
KU$_10_1_DBLINK_VIEW
KU$_10_1_FHTABLE_VIEW
KU$_10_1_HISTGRM_MAX_VIEW
KU$_10_1_HISTGRM_MIN_VIEW
KU$_10_1_HTABLE_VIEW
KU$_10_1_IND_STATS_VIEW
KU$_10_1_IOTABLE_VIEW

10 rows selected

SQL>

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
2 [报告]
发表于 2013-06-28 15:09 |只看该作者
循环内要不断 fetch 才行

回复 1# counter1219


   

论坛徽章:
0
3 [报告]
发表于 2013-06-28 19:56 |只看该作者
麻烦解释下需要怎么修改,不是先获取(fetch)再循环的么?回复 2# asdf2110


   

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
4 [报告]
发表于 2013-07-02 09:04 |只看该作者
fetch 每次只能fetch一条啊
如果想获取第二、第三,。。。就要不断的调用 fetch

回复 3# counter1219


   

论坛徽章:
0
5 [报告]
发表于 2013-07-04 17:23 |只看该作者
create or replace procedure qqpro
as
cursor c1 is select id from qq where rownum <=4 order by id;
vname varchar2(40);
begin
open c1;
LOOP
exit when c1%NOTFOUND;
fetch c1 into vname;
DBMS_OUTPUT.put_LINE(vname);
END LOOP;
CLOSE c1;
END;

SQL> exec qqpro;

PL/SQL procedure successfully completed

SQL> set serveroutput on;
SQL> exec qqpro;

1
2
3
4
4       --------   为什么最后一行会打印两次?PL/SQL procedure successfully completed

SQL>  select id from qq where rownum <=4 order by id;

   ID
-----
    1
    2
    3
    4

SQL>

论坛徽章:
0
6 [报告]
发表于 2013-07-04 17:41 |只看该作者
create or replace procedure qqpro
as
cursor c1 is select id from qq where rownum <=4 order by id;
vname varchar2(40);
begin
open c1;
LOOP
fetch c1 into vname;
exit when c1%NOTFOUND;
DBMS_OUTPUT.put_LINE(vname);  对换位置后,执行结果是正确的了,这个是什么原因?
END LOOP;
CLOSE c1;
END;

论坛徽章:
0
7 [报告]
发表于 2013-07-16 11:20 |只看该作者
循环逻辑问题,先做逻辑判断,还是先输出,当然结果就不一样了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP