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 中高效访 ...
随机推荐
- 64_o2
openrdf-sesame-queryrender-2.8.10-2.fc26.noarch..> 11-Feb-2017 18:38 52014 openrdf-sesame-queryre ...
- BZOJ - Problem 3622 - 已经没有什么好害怕的了
题意: 给定两个序列$a$和$b$,让它们进行匹配,求出使得$a_i > b_j$的个数比$a_i < b_j$的个数恰好多$k$,求这样的匹配方法数 题解: 这题的各种表示有一点相似又截 ...
- 004_Gradle 笔记——Java构建入门
Gradle是一个通用的构建工具,通过它的构建脚本你可以构建任何你想要实现的东西,不过前提是你需要先写好构建脚本的代码.而大部分的项目,它 们的构建流程基本是一样的,我们不必为每一个工程都编写它的构建 ...
- Loadrunner脚本学习总结
1.1 web脚本录制选择Web(HTTP/HTML)协议: 注意录制脚本前选择如下协议: 1.2 脚本如果需要使用如下函数: web_reg_save_param.web_fin ...
- Groovy 与 DSL
一:DSL 概念 指的是用于一个特定领域的语言(功能领域.业务领域).在这个给出的概念中有 3个重点: 只用于一个特定领域,而非所有通用领域,比如 Java / C++就是用于通用领域,而不可被称为 ...
- Linux中如何配置IP相关文件
Linux中如何配置IP 与网络相关的文件:1) /etc/sysconfig/network 设置主机名称及能否启动Network2) /etc/sysconfig/network-script ...
- ios测试apk
最近apk在ios上面测试总是会遇到奇奇怪怪的问题,现在是两个项目要集成在一个apk中所以将两个项目运行之后都是编译成了.a文件,然后在两个.a文件中都设置了两个意义相同变量名相同的全局变量(标识当前 ...
- 洛谷 P2369 EXCEEDED WARNING A 题解
题目传送门 直接用sort排序最后输出即可.但是数组要使用short int 类型.否则会超内存. #include<bits/stdc++.h> using namespace std; ...
- AC日记——小A和uim之大逃离 II 洛谷七月月赛
小A和uim之大逃离 II 思路: spfa: 代码: #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3f ...
- Educational Codeforces Round 51 (Rated for Div. 2) F - The Shortest Statement 倍增LCA + 最短路
F - The Shortest Statement emmm, 比赛的时候没有想到如何利用非树边. 其实感觉很简单.. 对于一个询问答案分为两部分求: 第一部分:只经过树边,用倍增就能求出来啦. 第 ...