请教为什么我用游标只能取到一条记录?

[复制链接]
查看11 | 回复9 | 2005-11-2 13:35:57 | 显示全部楼层 |阅读模式
请教为什么我用游标只能取到一条记录?
我的过程相关代码如下:
tmp_userobstacases_rowtmp_userobstacases%rowtype;
...
INSERT INTO tmp_userobstacases (begintime, endtime, error_typ, error_pheno, error_check_rst, process_mode, s_user_name, createtime, error_no)

SELECT a.begintime, a.endtime, '', '', '', a.source, '', SYSDATE, a.error_no

FROM t_accept_cases a

WHERE a.a_user_id = 'A2006100813523600000';

OPEN pointer FOR SELECT * FROM tmp_userobstacases;
LOOP
FETCH pointer INTO tmp_userobstacases_row;

EXIT WHEN pointer%NOTFOUND;
...
END LOOP;
在调试时发现pointer的rowcount为1,但INSERT时明明在tmp_userobstacases中插了多条记录。
我用的是oracle9i,请高手指点迷津,谢谢!
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
rowcount是你上一步执行返回的结果吧,不是你打开的游标的记录总数啊,要想得到总数,好像要循环一遍的。所以你每次得到的结果都是1啊。不知道有没有记错
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
测试出来是取一次,那个rowcount加一的
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
SQL> select * from test;
ID
--------------------
b1
b2
SQL>
SQL> declare
2tmp test%rowtype;
3type aa is ref cursor;
4pointer aa;
5begin
6OPEN pointer FOR SELECT * FROM test;
7LOOP
8FETCH pointer INTO tmp;
9EXIT WHEN pointer%NOTFOUND;
10dbms_output.put_line(pointer%rowcount||'-'||tmp.id);
11end loop;
12exception when others then
13dbms_output.put_line(sqlerrm);
14end;
15/
1-b1
2-b2
PL/SQL procedure successfully completed

过程没有看出什么问题,你可以在insert后执行select count(*) into var fromtmp_userobstacases ,然后把var输出,看看到底表里有几条记录,最后加上exception。
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
怎么调试的?
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
你插入完记录后游标都定义在最后一条记录了..
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
指点不了
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
感谢各位高手相助,问题解决,是我概念不清,还以为rowcount就是全部的记录数。zhouwf0726版主提的解决方案使我对次有更好的理解,感谢各位。
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
rowcount是执行到当前的记录数,不是记录总数。
回复

使用道具 举报

千问 | 2005-11-2 13:35:57 | 显示全部楼层
通过实验来搞定
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行