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可以这样实现:
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no( ); Select a.* from bsempms a,bsdptms b wherea.dpt_no( )=b.dpt_no; |
DB2 可以这样实现:
Select * from db2admin.bsempms right outer join db2admin.bsdptms on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no; Select * from db2admin.bsempms left outer join db2admin.bsdptms on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no; Select * from db2admin.bsempms full outer join db2admin.bsdptms on db2admin.bsempms.dpt_no=db2admin.bsdptms.dpt_no; |
7、LIKE问题
db2中谓词LIKE后边的表达式不支持字段。只支持一下类型:
A constant A special register A host variable A scalar function whose operands are any of the above An expression concatenating any of the above (附DB2文档: 使用格式: match-expression LIKE pattern-expression match-expression An expression that specifies the string that is to be examined to see if it conforms to a certain pattern of characters. The expression can be specified by: A constant A special register A host variable (including a locator variable or a file reference variable) A scalar function A large object locator A column name An expression concatenating any of the above pattern-expression An expression that specifies the string that is to be matched. The expression can be specified by: A constant A special register A host variable A scalar function whose operands are any of the above An expression concatenating any of the above with the following restrictions: No element in the expression can be of type LONG VARCHAR, CLOB, LONG VARGRAPHIC, or DBCLOB. In addition it cannot be a BLOB file reference variable. The actual length of pattern-expression cannot be more than 32 672 bytes. ) |
DB2中几个隔离级别select..for update with ** 的行锁
有关DB2中隔离级别和锁的各种用法和机制的试验,
在db2 9中我做了以下的试验, Create table RRTest (pkID VARCHAR(20) NOT NULL , unID1 varchar(20) Not NULL, UnID2 varchar(20) ,"CUSTOMER_ID" VARCHAR(6) , "ORDER_TYPE" DECIMAL(2,0) , "EXECUTION_TYPE" DECIMAL(2,0) , "ORDER_DATE" VARCHAR(8) , "ORDER_TIME" VARCHAR(6) , "ORDER_DATETIME" TIMESTAMP , "SIDE" DECIMAL(1,0) , "TRADE_TYPE" DECIMAL(1,0) , "ORDER_AMOUNT" DECIMAL(15,2) , "ORDER_PRICE" DECIMAL(8,4), TSID varchar(20) ) insert into RRTest SELECT Order_ID, Order_ID, Order_ID, CUSTOMER_ID, ORDER_TYPE, EXECUTION_TYPE, ORDER_DATE, ORDER_TIME, ORDER_DATETIME, SIDE, TRADE_TYPE, ORDER_AMOUNT, ORDER_PRICE ,ORDER_ID FROM DB2INST1.Fx_Order where ORDER_DATE >'20070401' GO select count(*) From RRTEST 72239 ALTER TABLE "DB2INST1".RRTest ADD PRIMARY KEY (pkID); CREATE UNIQUE INDEX UNIQINDX ON RRTest(unID1) CREATE INDEX INDX002 ON RRTest(unID2) db2 "RUNSTATS ON TABLE DB2INST1.RRTest ON ALL COLUMNS AND INDEXES ALL ALLOW WRITE ACCESS" db2 connect to db2TT db2 c select * From RRTEST where TSID='20070223ORD01267732' for update with RR select * From RRTEST where TSID='20070222ORD01266302' for update with RR select * From RRTEST where TSID='20070223ORD01267732' for update with RS select * From RRTEST where TSID='20070222ORD01266302' for update with RS select * From RRTEST where unID1='20070223ORD01267732' for update with RR select * From RRTEST where unID1='20070222ORD01266302' for update with RR select * From RRTEST where unID1='20070223ORD01267732' for update with RS select * From RRTEST where unID1='20070222ORD01266302' for update with RS select * From RRTEST where unID2='20070223ORD01267732' for update with RR select * From RRTEST where unID2='20070222ORD01266302' for update with RR select * From RRTEST where unID2='20070223ORD01267732' for update with RS select * From RRTEST where unID2='20070222ORD01266302' for update with RS select * From RRTEST where pkID='20070223ORD01267732' for update with RR select * From RRTEST where pkID='20070222ORD01266302' for update with RR select * From RRTEST where pkID='20070223ORD01267732' for update with RS select * From RRTEST where pkID='20070222ORD01266302' for update with RS |
最新相关文章
发表评论