oracle 一个游标可存多大的数据量

比如可存100M,或者1000万条? 我希望的是这样的回答,或者在什么地方可以影响到游标的存储量?

游标和指针我理解是一个意思的
它只是用来描述取得内存中数据的方式
就像GPS导航一样,GPS会给你地图上的位置,而能不能跑到,取决与你的车里有多少油
例如:
在数据库中查询 取到一个结果集 你能不能取到那些数据,取决于你的机器 假如结果集中有一个CLOB类型字段 而你的机器,内存+硬盘总共250M 没可能看到数据,对吧
修改最大游标: alter system set open_cursor=800, scope=both;
只要你能接受性能,随便你改,另外 open_cursor是整形 改得越大,性能越受影响

以下来自“奔驰M888”的回答
1、plsql是面向过程的语言,这类语言还有c,cobol等,这类语言的共同点是一次只能处理一条数据,而数据库sql返回的对象是一个集合,这样直接用plsql程序操作就会出现问题。
2、在这种环境下就出现了游标,游标实际是一个内存地址,只想的是sql查询出的结果集,当需要的时候再根据游标一条一条取数据【fetch】,直到全部数据取完。

就像chsoftstar说的那样 出现游标无法取数的问题,很大可能是写错了,具体什么原因,还得楼主自己查找了
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
我在metalink 上问的oracle 工程师:

没有限制,因为cursor本身并不存数据,它只是相当于一个指针。追问

谢谢!还有几个小疑问可否解答一下:
1.在我的游标中有大量的数据,但是没有出来的却是有两百多条,这种情况我觉得不太像是游标的问题2.在plsql进行查询时,例如select * from emp,这个emp表中有几千万条数据,但是在plsql中查询的时候,点击显示所有内容时,会出现“Result set exceeds the maximum size (100M),if nexessary,you can explicitly continue this query.”这样的提示,游标也会有这样的限制吗?

追答

1.首先你要理解游标的作用。
以下面的code为例:
declare
cursor c1 is select * from large_table(几千万的数据);
begin
for acct in c1 loop --打开游标
--- 对每行数据进行特定操作
if 条件 then --当满足一定条件时跳出游标
exit;
end if;
end loop;
end;
从以上例子看出,游标中不可能存大量数据,它保存的只是指向一条记录的指针。当第一次打开游标时,指针指向select的第一行数据。当第二次循环时,指针下移,指向第二条数据。
当满足if条件的时候,就会跳出游标。因此游标不一定会遍历select中的所有数据。

2.第二个问题我也遇到过,你在用plsql 将所有的记录进行显示的时候,实际上是将这些记录都缓存到你PC的内存里。而游标每次只会提取一条数据,进行操作,所以不会有你这样的限制。

本回答被提问者采纳
第2个回答  2012-06-27
你所存数据的表的数据量有多少,游标就能读多少。追问

我现在出现这样一个问题,就是数据量很大,但是发现游标并没有都读取出来,所以会由此一问!

追答

那应该是你的游标写错了。

第3个回答  2012-06-27
游标一条一条的读 你觉得一条数据能有多大,还没见过游标存储量的问题
第4个回答  2012-06-27
倒没听说过有什么要求,如果有也应该和变量存储空间有关系,但一般记录多时不建议使用,游标是一条一条的读取,运行速度会很慢追问

你知道游标和变量存储空间的关系吗?

追答

startup nomount启动数据时会显示

相似回答