楼主: biti_rainy

关于cursor open 的时候到底做了些什么

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
31#
 楼主| 发表于 2004-3-13 16:57 | 只看该作者
最初由 bodyguard 发布
[B]在某些情况下,OPEN游标时就锁定了相关记录,这些锁定的依据或许是ROWID,或许是字段中的条件值.OPEN时存在以下几种情况
1:不需读表中数据,也不需rowid  
2:需要读rowid    -------  能具体化 ?
3:需要读表中部分数据(但并不返回数据),读的这些数据并不是SELECT 子句中的项,而是where 以后的部分.   -----  你这到底是表达的什么意思?能否具体点.我越来越迷糊了,都不知道您再说啥
这个我以后再做实验.
biti_rainy或其他人有空做了贴上了让我们欣赏欣赏. [/B]


open 的时候锁定记录? 不会说的是  select ... for  update  ?
那又是什么呢 ?


还是一句话,能否把您的猜测,举个实际的例子.或者是文章观点的来源. 若是臆测,并且没有具体举例,我连一个推翻这个论点的例子都不知道如何去做

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
32#
 楼主| 发表于 2004-3-13 17:18 | 只看该作者
3:需要读表中部分数据(但并不返回数据),读的这些数据并不是SELECT 子句中的项,而是where 以后的部分.

1: where 中是直接跟字段条件码?显然你表达的应该不是这个意思

2: 那是说 where里面是复杂的子查询码? 或者是其他表的查询结果作为条件? 猜测你是这个意思? 即使如此,open的时候也并没有产生这个子查询的结果的.

3: 弱还有其他情况,我就愚顿了,不知道说啥好

使用道具 举报

回复
论坛徽章:
52
天蝎座
日期:2016-02-18 17:22:06奥运会纪念徽章:花样游泳
日期:2012-07-16 22:06:37双黄蛋
日期:2012-03-21 20:16:10双黄蛋
日期:2012-02-29 11:03:35复活蛋
日期:2012-02-22 20:39:29紫蛋头
日期:2012-01-07 00:15:412012新春纪念徽章
日期:2012-01-04 11:49:54紫蛋头
日期:2011-11-27 21:54:28鲜花蛋
日期:2011-11-17 19:25:23ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
33#
发表于 2004-3-13 18:13 | 只看该作者
biit_rainy做过开发吧?

你的很多东西都有些道理。但决不是火气大了就理直气壮。
我看到了彩虹,但我看到了太阳的全部颜色吗?

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
34#
 楼主| 发表于 2004-3-13 20:15 | 只看该作者
是的,不是声音大就是有道理的

我很希望有人能推翻我的结论
那将让我重新思考这个问题

但让我郁闷的是 我不但不知道怎么去推翻自己的结论
甚至连别人表达的是个啥都没弄清楚

我只是急切的希望你能通过 事实,哪怕是别处的理论,或者哪怕是 你的观点的明确的阐述
让我有一个方向去证实或者推翻自己的结论

但我不能容忍扯上一堆不必要的东西进来混淆概念

至少在我看来,优化模式和游标close前的提交  等等 是和这个命题无关的

我只希望你能通过数据库的表达方式,即使没有试验,仅仅是一种说明性的数据库的表达方式
我可以自己去做试验来 证实 问题到底是怎么回事

但你这都不给我,我自然很郁闷了

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
35#
 楼主| 发表于 2004-3-13 20:17 | 只看该作者
比如
你能告诉我

在某些情况下,OPEN游标时就锁定了相关记录,这些锁定的依据或许是ROWID,或许是字段中的条件值.OPEN时存在以下几种情况
1:不需读表中数据,也不需rowid
2:需要读rowid
3:需要读表中部分数据(但并不返回数据),读的这些数据并不是SELECT 子句中的项,而是where 以后的部分.

这里的 2,3  是从哪里得来得结论  ?

使用道具 举报

回复
论坛徽章:
52
天蝎座
日期:2016-02-18 17:22:06奥运会纪念徽章:花样游泳
日期:2012-07-16 22:06:37双黄蛋
日期:2012-03-21 20:16:10双黄蛋
日期:2012-02-29 11:03:35复活蛋
日期:2012-02-22 20:39:29紫蛋头
日期:2012-01-07 00:15:412012新春纪念徽章
日期:2012-01-04 11:49:54紫蛋头
日期:2011-11-27 21:54:28鲜花蛋
日期:2011-11-17 19:25:23ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
36#
发表于 2004-3-14 10:10 | 只看该作者
有些原文我也不能贴出来.有些东西没有原文,仅仅是猜测,是错是对不知道,需要试验来检验.
这个帖子到现在偏离主题了.就此打住.
有闲的时候再发帖子和各位讨论游标.

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
37#
发表于 2007-3-18 10:18 | 只看该作者
最初由 bodyguard 发布
[B]可以看出:
1:游标的OPEN是非常快的(1秒)
2:Fetch第一条记录花了3.5分钟
3:Fetch剩下的1048575条记录花了9分钟
4:Fetch第一条记录时系统做了全表扫描,直接读写,消耗了大量的资源,做了排序.
5:Fetch剩下的1048575条记录仅仅是取一下结果而已..
[/B]


我还是觉得biti_rainy说的对。

从上面的数据可以看出了,open很快,说明没有执行查询。

fetch第一条花了那么久,说明是查询了。但是从字面上理解fetch仅仅是取纪录,那么fetch之前肯定隐藏的执行了查询(用了少于3.5分钟)。而fetch仅仅是把结果集中的数据放到变量里,使指针加1。


从“Fetch剩下的1048575条记录花了9分钟”也可以看出,查询处理的集合已经存在了。没条用的时间才
SQL> select 9*60/1048575 from dual;

9*60/1048575
------------
0.0005149846 秒

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2007-09-19 14:10:06ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
38#
发表于 2007-3-23 16:25 | 只看该作者
cursor就是指向数据块头的指针,open看来是读地址,fetch去数据,再移动cursor指向下一个地址。

使用道具 举报

回复
论坛徽章:
75
生肖徽章:猪
日期:2014-09-05 10:25:05指数菠菜纪念章
日期:2016-10-17 16:12:49生肖徽章:兔
日期:2015-02-05 16:49:02生肖徽章:鼠
日期:2015-02-05 16:49:02生肖徽章:鼠
日期:2015-02-05 16:49:02生肖徽章:马
日期:2015-02-05 16:49:02生肖徽章:羊
日期:2015-02-06 08:40:35生肖徽章:羊
日期:2015-02-06 08:40:34股神
日期:2015-01-05 08:27:16菲尼克斯太阳
日期:2014-12-29 13:11:51
39#
发表于 2008-10-10 16:21 | 只看该作者
other oponion about cursor:
The private SQL area of a cursor is itself divided into two areas whose lifetimes are
different:
 The persistent area, which contains, for example, bind information. It is freed
only when the cursor is closed.
 The run-time area, which is freed when the execution is terminated.
Oracle creates the runtime area as the first step of an execute request. For INSERT,
UPDATE, and DELETE statements, Oracle frees the runtime area after the statement
has been run. For queries, Oracle frees the runtime area only after all rows are
fetched or the query is canceled.

(info is from  9i concept)

使用道具 举报

回复
论坛徽章:
1
参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:28
40#
发表于 2009-3-4 15:20 | 只看该作者
看了这个帖子颇有收获,感谢biti大师共享你的知识和分析问题的思路。
我有个小小的疑惑,烦请大师解释,帖子中谈论的cursor都是过程中的,如果对pro*c或其他程序中的游标(简单的SQL)进行了缓存(比如设置了session_cached_cursor,或按照Oracle Document的建议parse once many execution),那么是不是每次查询到的结果都是一样的?如果是一样的话岂不是看不到对数据的修改,那么做游标缓存岂不是导致错误的结果集了。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表