cursor的使用

[复制链接]
查看11 | 回复8 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
对于cursor的使用
在v$open_cursor中的数量,是每一条增、删、改语句的反映吗?每条语句都是一个游标吗?好像不含有select语句???
在存储过程中定义的游标,跟这个有什么关系吗?每个游标进行多项操作,在v$open_cursor中体现是单条还是多条?
参数文件中的open_cursors,到底是并发的最大游标数,还是并发执行的sql数目?
精华区那篇文章
http://www.itpub.net/showthread. ... 侍饣故敲惶?步馔赋?/a>
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
没人能讲解一下吗?
实际中是这样一个例子,在java的一个应用程序中,大约有几千行要更新的程序,需要先查出来一行数据,然后马上根据这行数据的信息更新该行数据,(一个select然后一个update),整个更新在一个事务中完成。
当preparestatement定义后,同时使用在select然后用同一个preparestatemennt再调用update语句时,很快maxsize open cursors错误。此时观察v$open_cursor中全部都是(大多)select,没有update,不知道为什么?????(做完一行关闭一次preparestatement)
后来做了一些更改尝试,将select和udpate使用了两个preparestatement,也是使用一次关闭一次,就没有发生maxsize open cursor现象。
谁能帮我解释一下这个现象的原因???
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你为什么要select 一行update 一行呢?直接update 不就可以了吗?
是否现式的定义了游标而没有关闭呢
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
因为要做一些其他的java处理(数据转换等)
在java里面的preparestatement,一次sql,就是打开一个游标吗,但preparestatement关闭不相当于关闭游标了吗?
而且为什么只看到那些select,看不到udpate的游标
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
update语句是隐式游标,update执行完后游标马上就关闭了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
明白了,所以很难看到update游标,
能再详细讲解一下隐式游标和显示游标吗?
那,为什么select类游标不释放呢???
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
select要显式close游标
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
select要显式close游标
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
显示和隐式是pl/sql中的概念,可以引申到通用的sql语句调用上来吗?
比如外部调用(java,c等)、比如sqlplus中直接写的一些语句,是怎样用游标的概念的呢?select之后,怎样显示关掉呢??
pl/sql中,selec into 和DML是隐式游标、select多条是显示游标,必须声明才能使用。
但普通应用(如sqlplus)跟这个有区别吧
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行