1、Oracel中的"decode"
DB2的解决方案:用"case"条件表达式来完成。
(1)CASE
|
(2)CASE 表达式1
|
上面的WHEN可以重复多次,就像C中的SWITCH ..CASE的表达.
例如:
|
2、Oracle中的Start with...Connect By递归查询
DB2解决方案:用case条件表达式完成。
|
3、Oracle中的dual表对应DB2中的SYSIBM.SYSDUMMY1表
DB2解决方案:对应于DB2中的 SYSIBM.SYSDUMMY1表
|
4、日期转换问题
DB2解决方案:有相应的函数
|
按照以上字段pkID 是主键,unID1 是唯一健索引,unID2 是普通健索引,TSID 是普通字段,没有在上建立索引。
试验的结论:
|
锁行是指在一个事务中用某种方式读取并更改了改行数据并显示得指明要修改后,这个事务将锁住改行,直到它提交或者回滚了事务后,才释放该锁。
锁表是指在用以上各种SQL在读取并更改一行的同时锁住了整个表。
对以上红字部分(1)可能有不能理解的是:为什么对普通索引和主键或者唯一健索引的不同结论?
对PK和UNIQ的解释是因为RR 是可重复的读的级别,对这次检索扫描到的有可能成为自己的潜在检索对象的内容都会锁住,而因为是主键或者唯一健,别的行不可能成为这次这个检索的潜在读的范围,就是对别的数据此事务根本就没有必要锁,任何情况的更改都不可能出现幻读的情况(此表上的约束限制),所以只锁这一行。这么理解对PK,UNIQ没有问题。
但是NormalINDEX我认为应该是锁住这个表而不是不锁。这点一直没想明白。留待以后再加强理解。
对RS隔离级别是“锁定检索到的数据行”,是通过SQL检索到的结果进行锁定, PK,UNIQ,INDEX的结论完全都可以理解。对 tableScan的检索而出现的锁表有些象RR隔离级别的所为。
详细过程:select * From TTT where ****= ? for update with RR(RS),这里的***并不是随便定义的。
隔离级别分为RR/RS/CS/UR四个级别:
1.RR隔离级别: 在此隔离级别下, DB2会锁住所有相关的纪录。 在一个SQL语句执行期间, 所有执行此语句扫描过的纪录都会被加上相应的锁。 具体的锁的类型还是由操作的类型来决定, 如果是读取,则加共享锁; 如果是更新, 则加独占锁。 由于会锁定所有为获得SQL语句的结果而扫描的纪录, 所以锁的数量可能会很庞大, 这个时候, 索引的增加可能会对SQL语句的执行有很大的影响,因为索引会影响SQL语句扫描的纪录数量。 #p#分页标题#e#
2.RS隔离级别: 此隔离级别的要求比RR隔离级别稍弱,此隔离级别下会锁定所有符合条件的纪录。 不论是读取, 还是更新, 如果SQL语句中包含查询条件, 则会对所有符合条件的纪录加相应的锁。 如果没有条件语句, 也就是对表中的所有记录进行处理,则会对所有的纪录加锁。
3.CS隔离级别: 此隔离级别仅锁住当前处理的纪录。
4.UR隔离级别:此隔离级别下,如果是读取操作,不会出现任何的行级锁。对于非只读的操作,它的锁处理和CS相同。
DB2默认的隔离级别是CS。即游标稳定性。
DB2分页查询:
|
5、nvl 问题
DB2解决方案:利用coalesce(,) 或 value(,)方法。
Oracle中的nvl对应db2中的value ,只是oracle中的语法更有宽松一些,在db2中,value要求两个参数必须是同一种类型的,nvl要求则不是很严格,nvl(A,‘’),如果A是数字类型或者日期类型的这个表达式也没有 问题,但是在db2中,若是也这么写的话, value(A,''),那肯定就有问题了,总的来说,基本上是一致的。
6、左右外连接问题
db2的左右外连接的语法和标准sql语法一样,只是没有oracle中的(+)这个简单符号来标记左右外连接,left (right) outer join on
(1).内连接INNER JOIN的Oracle和DB2的写法
Oracle可以这样实现? Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; DB2 可以这样实现? Select * from db2admin.bsempms inner join db2admin.bsdptms on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no;
(2).外连接的Oracle和DB2的写法(右外连接,左外连接,完全外连接,组合外连接)
Oracle可以这样实现:
|
DB2 可以这样实现:
|
7、LIKE问题
db2中谓词LIKE后边的表达式不支持字段。只支持一下类型:
|
DB2中几个隔离级别select..for update with ** 的行锁
有关DB2中隔离级别和锁的各种用法和机制的试验,
|
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交