动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.甲骨文表示保护数据库安全关键在.
.Oracle专家调优秘密(二).
.漫谈镜像(备份)网站的几种有效方.
.通过分析SQL语句的执行计划优化S.
.使用oradim恢复windows上的数据库.
.ORACLE之常用FAQ V1.0一(构架体系.
.Oracle 9i 分析函数参考手册.
.如何创建SQL Server 2000 故障转.
.ORACLE入门之ORACLE的备份.
.工作中遇到的oracle故障分析和处.
.为什么我的网站只能从局域网里面.
.如何让 Linux 回拨 Windows PC 上.
.访问Oracle数据库时如何限制绕过.
.ORACLE 培训教程(1).
.oracle初始化参数设置.
.通俗解说ORACLE.
.For Loop读取游标和Open Close的.
.LILO使用指南(中).
.oracle大型数据库的信息排错一法.
.防范黑客攻击Oracle系统的八大常.

深入讲解游标类型为什么会产生数据检索

发表日期:2008-4-9 |


游标类型产生的数据检索问题:

现象:

在将数据库兼容的级别从80改到90以后, 下文中的游标循环不出数据, 单独SELECT却会有结果:

DECLARE MyCursor CURSOR LOCAL READ_ONLY

FOR

SELECT

Col1

FROM tbname WITH(NOLOCK)

WHERE Name LIKE 'SNET%'

AND B_Key IN(

SELECT TOP(100)

KeyID

FROM tbmaster WITH(NOLOCK)

WHERE Date >= '01/01/2007'

AND Date < '02/01/2007')

OPEN MyCursor

FETCH NEXT FROM MYCURSOR

WHILE (@@FETCH_STATUS=0)

BEGIN

FETCH NEXT FROM MYCURSOR

END

CLOSE MyCursor

DEALLOCATE MyCursor

原因:

游标类型的问题。

参照以上的定义, 游标类型是: DYNAMIC

在定义此类游标的情况下, S锁是必须下的, NOLOCK提示并不会起作用,此现象通过查询游标OPEN时的sp_lock信息就可以观察得到。它产生了IS和S锁。

而NOLOCK 提示是否起作用, 会影响的执行的结果(执行计划一样, 但在取数据的时候, 却会有所差异)

对于下面这句, 有NOLOCK 和无NOLOCK 时, 它取的数据是不一样的, 因为它只取了TOP 100, 而且没有ORDER BY 来保证取数的顺序, 所以取数据顺序的细致差异, 就导致了最终结果的不同. 而最终结果的不同, 导致了整个游标取出来的数据不同。

SELECT TOP(100)

KeyID

FROM tbmaster WITH(NOLOCK)

WHERE Date >= '01/01/2007'

AND Date < '02/01/2007')

在游标定义SELECT 语句中, 当NOLOCK 有效时, 是可以取到数据的, 但NOLOCK 无效(DYNAMIC 游标导致)时, 查询结果是无数据的

所以最终看到的结果是: 游标循环不出来数据, 但只做查询却有数据。

如果把游标定义中的查询语句的NOLOCK 去掉做查询, 也会没有数据(与DYNAMIC 游标结果一致)

故这个问题严格来说不应该是兼容级别的问题, 在80 级别下, 还是有可能发生, 只是机率更小, 或者是内部执行原理不太一样, 导致没有这种情况出来而已

由于没有ORDER BY来保证顺序, 而有无NOLOCK的数据可能不会一样, 所以80与90下都可能出现问题, 只是90会显得比较突出, 或者仅仅时正好被发现了。

解决方法如下:

首先,需要把游标定义改成下面的,这样不会导致NOLOCK 失效, 而且速度比原来的定义方式快得多. 如果游标一定要与原始表的数据变化关联起来, 建议用KEYSET, 或者是去掉NOLOCK 提示(因为没有意义), 假如对取的数据有要求, 我们还应当考虑加ORDER BY来保证取数顺序:

DECLARE MyCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC

FOR

上一篇:调用存储过程时注意要使用output做修饰符 人气:1021
下一篇:怎样才能提高Oracle 10G增量备份速度 人气:700
浏览全部Oracle的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成