Chinaunix首页 | 论坛 | 博客
  • 博客访问: 477596
  • 博文数量: 63
  • 博客积分: 1485
  • 博客等级: 上尉
  • 技术积分: 596
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-21 14:49
文章分类

全部博文(63)

文章存档

2018年(8)

2017年(25)

2016年(10)

2012年(6)

2010年(14)

我的朋友

分类: Oracle

2018-02-28 15:29:47

db2中cursor的语法
                         .-NO SCROLL------------------------.   
>>-DECLARE--cursor-name--+----------------------------------+---> ...... 
                         | .-ASENSITIVE------------.        |   
                         '-+-----------------------+-SCROLL-'   
                           +-INSENSITIVE-----------+             
                           |           .-DYNAMIC-. |             
                           '-SENSITIVE-+---------+-'             
                                       '-STATIC--'  
   
而在Oracle中,只有"scroll"是支持的,别的都不支持。而且,对于"scroll"也仅仅是在嵌入式sql中支持,而在pl/sql中不支持。

说说scroll吧:
没有scroll的时候,cursor打开后就是第一条数据;然后可以逐条顺序的向后访问,直到结束。
有了scroll,cursor就支持随机访问了。first/last/next/previous,甚至于指定一个位置 absolute/relative。这就很灵活。

再说说sensitive/insensitive吧:
有这样一种情况,cursor打开后,假设里面有n条记录;恰巧在访问cursor的过程当中,这n条记录发生了改变。那么,在后续的cursor的访问中,新的改变是否体现在crusor中呢?
Oracle是不支持这个的。也就是说,Oracle中的cursor就像快照一样。我做了类似的测试,发现外面的修改不会影响cursor里面的数据。
DB2很灵活,通过指定"sensitive"来使能这个特性。这样,外面的修改就能体现在cursor里面的数据上了。

这么做是否必要呢?我觉得即便使能了,在访问cursor里面的数据的时候,也可能访问不到新的数据;比如下面的情况(我没验证过,猜测而已):
1. 打开cursor,包含A/B/C一共3条数据。
2. 访问cursor中的数据A.
3. 此时,外部程序修改了A.
4. 继续访问cursor中剩余的2条数据.
显然,A的修改不会被访问cursor的程序捕获到。
带上"sensitive",只能说一定程度上可以让外面的修改体现在cursor中的数据上。

我的理解比较粗浅,而且没有在db2上做任何测试。

如有不对,欢迎指正。

Some useful links:


========== db2
Sensitive/insensitive/scroll cursor
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/apsg/src/tpc/db2z_typecursor.html

========== oracle
These are for pl/sql:

There’s no key word “scroll” in cursor declaration statement
https://docs.oracle.com/database/121/LNPLS/explicit_cursor.htm#GUID-38C5DBA3-9DEC-4AF2-9B5E-7B721D11A77C__CJAEHJBH
 
There’s no key word “last/absolute” in fetch statement.



This is for embedded sql

It support “scroll cursor”.
https://docs.oracle.com/cd/E11882_01/appdev.112/e10826/pco05sql.htm#LNPCB005


A discussion about the “sensitive scroll cursor”
https://stackoverflow.com/questions/1690822/do-database-cursors-pick-up-changes-to-the-underlying-data

阅读(3109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~