sybase数据库技术 :游标可更新与for read only/for update
在定义游标时不指定for update 或 for read only,ASE会检查以了解游标是否可更新;
如果游标查询语句中包含order by子句,则ASE会将游标定义为只读;其它情况下定义为可更新游标;
如果不涉及更新或删除表数据的话,建议在游标定义中加上for read only选项,这样ASE将游标定义为只读;
表customer在c_custkey列上建有唯一索引,查询表的前10行内容(所有字段拼接成一个字符串),
如果定义游标为for read only:
declare cur_hash cursor for select top 10 convert(varchar,c_custkey)+coalesce( nullif(isnull(c_name,''), '') , ' ')+coalesce( nullif(isnull(c_address,''),'') , ' ')+convert(varchar,c_nationkey)+coalesce( nullif(isnull(c_phone,''),'') , ' ')+convert(varchar,c_acctbal)+coalesce( nullif(isnull(c_mktsegment,''),'') , ' ')+coalesce( nullif(isnull(c_comment,''),'' ) , ' ') from customer for read only
则使用表扫描返回表的前10行数据;
如果定义游标为for update或者不指定for read only/for update:
则ASE会使用c_custkey列上的唯一索引扫描表数据,然后返回按照c_custkey键顺序的前10行数据;
对于该查询语句:select top 10 ... from customer,即使不指定for update,ASE也会将游标定义为可更新;
如果没有指定 for update 子句, ASE将选择任何唯一索引;如果指定表列没有唯一索引的情况下,它也可以使用其它索引或表扫描。
但如果指定了 for update 子句, ASE必须使用为一个或多个列定义的唯一索引扫描基表。如果不存在,则返回一个错误。
可以通过抽象计划来查看游标扫描表数据的时候是否使用了唯一索引:
查看在存储过程外声明的游标信息:
sp_cursorinfo null, cursor_name
查看在存储过程内声明的游标信息:
在存储过程内加入: exec sp_cursorinfo
存储过程sp_cursorinfo除了显示游标的状态信息外,还显示游标查询语句的抽象计划信息。
游标的状态不同输出也会不同,一般会输出:
1、游标定义、编译、扫描数据所使用的隔离级别;
2、游标是否可滚动;
3、游标当前位置;
4、游标已经读取/更新/删除的行数;
5、游标在事务提交或回滚后是否继续保持打开状态;
6、每次提取的行数;
7、游标是只读还是可更新的;
8、游标所消耗的内存数量;
9、游标返回的结果集的列数;
10、游标结果集的列信息(列类型、列宽度、是否可更新);
关于选项:set close on endtran
如果提交或回退游标的当前事务,默认情况下游标是保持打开状态;输出:The cursor will remain open when a transaction is committed or rolled back.
如果设置set close on endtran on则提交或回退游标的当前事务时游标会关闭;输出:The cursor will be closed when a transaction is committed or rolled back.
sybase数据库技术 :游标可更新与for read only/for update的更多相关文章
- 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF
1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载 链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...
- 浅谈数据库技术,磁盘冗余阵列,IP分配,ECC内存,ADO,DAO,JDBC
整理-----数据库技术,磁盘冗余阵列,IP分配, ECC内存,ADO, DAO,JDBC 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发.发布和支持.My ...
- delphi 数据库技术沉浮录--谨给成为历史的BDE
2014年9月,delphi xe7 出来了,这次在数据库技术方面,彻底抛掉了从1995 年 delphi 1.0 就自带的(Borland Database Engine)数据库访问技术.从而宣告了 ...
- 2016 DTCC(中国数据库技术大会)
上周去参加了2016 DTCC(数据库技术大会),会议总共持续3天,议题非常多,我这里搜集了最新的公开的PPT内容,有兴趣的同学可以下载看看,PPT合集下载链接为:http://pan.baidu.c ...
- Sybase数据库截断和清空日志的方法
今天碰到一个奇怪的问题,当我打开应用程序的时候,开始的时候鼠标图标还显示程序正在启动,可是一会后,就没有任何反应了.重复了N多次都是这样,后来发现,每次打开应用程序的时候,任务管理器中都会相应的多一个 ...
- 《C#语言和数据库技术基础》单词必备
<C#语言和数据库技术基础> 第一章1..NET Framework 框架2.sharp 尖锐,强烈的3.application 应用程序4.devel ...
- sybase数据库和oracle数据库中字段中含有换行符的解决办法
最近在做数据库从sybase到oracle的迁移工作,sybase数据库表bcp导出后,通过sqlldr导入到oracle数据库,然后oracle数据库通过spool按照sybase数据库bcp的格式 ...
- CouchBase数据库-一个较新的、发展迅速的nosql数据库技术
couchbase是一个较新的.发展迅速的nosql数据库技术.2014年,viber宣布使用couchbase替换mongodb,以适应10亿级的用户量,目前,couchbase已大量运用于生产环境 ...
- XPages访问关系型数据库技术与最佳实践
XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...
随机推荐
- UIScrollViewDelegate 方法调用
UIScrollViewDelegate 方法调用 /** 设置缩放的View, 初始化完之后调用此方法告诉scrollView 谁可以缩放操作, 然后进行布局 */ func viewForZoom ...
- vue数据传递--我有特殊的实现技巧
最近碰到了比较多的关于vue的eventBus的问题,之前定技术选型的时候也被问到了,vuex和eventBus的使用范围.所以简单的写一下.同时有一种特殊的实现方案. 有这么几种数据传递方式,vue ...
- jekyll安装及使用
清除旧版Ruby,若存在 yum remove ruby 若为源码,使用如下命令 cd <your-ruby-source-path> make uninstall 下面开始安装Ruby ...
- beego学习笔记(4):开发文档阅读(5)
controller的逻辑: 我们看下面的代码,就知道怎么传值的: import ( "github.com/astaxie/beego" ) type MainControlle ...
- gtk+学习笔记(二)
如何创建一个按钮呢,直接贴代码把,有详细的注释. #include<gtk/gtk.h> gint data_count=; void on_button_clicked (GtkWidg ...
- 前端代码编辑器ace 语法提示 代码提示
本文主要是介绍ace编辑器的语法提示,自动完成.其实没什么可特别介绍的,有始有终吧,把项目中使用到的ace的功能都介绍下. { enableBasicAutocompletion: false, // ...
- for循环练习题(共六道题)
第一题: 假设一个简单的ATM机的取款过程是这样的:首先提示用户输入密码(password),最多只能输入三次,超过3次则提示用户“密码错误,请取卡”结束交易.如果用户密码正确,再提示用户输入取款金额 ...
- TestDirector其他
一.查看连接TD的用户 1.用单击界面上的“Connections”按钮,进入如下图: 二.Licenses管理 1.单击“Licenses”按钮,显示如下图: 2.单击“Modify License ...
- 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]
题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...
- 关于Hibernate中的临时态, 持久态, 游离态
三态的基本概念: 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: ...