• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >DB2 > Oracle到DB2的SQL移植解决方案

Oracle到DB2的SQL移植解决方案

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了db2和oracle的区别,oracle链接db2,oracle转db2,oracle连接db2,oracle db2等相关知识,希望本文的分享对您有所帮助
</div>

   将Oracle(大型网站数据库平台)迁移到DB2上,SQL会有些变化,下面让我们来具体看一下:

1、Oracel中的decode
DB2解决方案:用case条件表达式完成。

case两种语法模式:

(1)CASE

WHEN 条件 THEN 结果1

ELSE 结果2

END

(2)CASE 表达式1

WHEN 表达式2 THEN 结果1

ELSE 结果2

END

上面的WHEN可以重复多次,就像C中的SWITCH ..CASE的表达.

例如:

SELECT ORDNO,CUSNO,

CASE MONTH(SHIPDATE)

WHEN ''01'' THEN ''Jan''

WHEN ''02'' THEN ''Feb''

WHEN ''03'' THEN ''Mar''

WHEN ''04'' THEN ''Apr''

WHEN ''05'' THEN ''May''

WHEN ''06'' THEN ''Jun''

WHEN ''07'' THEN ''Jul''

WHEN ''08'' THEN ''Aug''

WHEN ''09'' THEN ''Sep''

WHEN ''10'' THEN ''Oct''

WHEN ''11'' THEN ''Nov''

WHEN ''12'' THEN ''Dec''

END

FROM FILE

应用实例:

Oracle(大型网站数据库平台) SQL:

-------------------------

select decode(t.organtypecode, ''D'', t.parent, ''S'', t.parent, t.id)

from A_ORGAN t

where t.parent = 35

DB2 SQL:

-------------------------

select case x.organtypecode

when ''D'' then

x.parent

when ''S'' then

x.parent

else

x.id

end

from a_Organ x

where x.parent = 35;

2、Oracle(大型网站数据库平台)中的Start with...Connect By递归查询

DB2解决方案:用with公共递归表达式来解决。

DB2解决方案:用case条件表达式完成。

Oracle(大型网站数据库平台) SQL:

-------------------

select t.id

from a_organ t

start with t.id in (select decode(t.organtypecode,

''D'',

t.parent,

''S'',

t.parent,

t.id)

from A_ORGAN

where t.id = 35)

connect by t.parent = prior t.id

DB2 SQL:

-------------------------

WITH FKK(id) as

(select o.id from a_organ o

where o.id=35

UNION ALL

select case x.organtypecode

when ''D'' then x.parent

when ''S'' then x.parent

else x.id

end

from FKK fk, a_organ x

where fk.id=x.parent)

select distinct id from FKK;

3、Oracle(大型网站数据库平台)中的dual表对应DB2中的SYSIBM.SYSDUMMY1表

DB2解决方案:对应于DB2中的 SYSIBM.SYSDUMMY1表

Oracle(大型网站数据库平台) SQL:

-------------------------

select 15 as ttt from dual

结果:

ttt

-------

15

DB2 SQL:

-------------------------

select 15 as ttt from SYSIBM.SYSDUMMY1

结果:

ttt

-------

15

4、日期转换问题

DB2解决方案:有相应的函数

Oracle(大型网站数据库平台) SQL:

-------------------------

select m.*

from dj_mcdj m

where m.mcqc || '' '' like ''%$P%''

and m.xzqhdm || '' '' like ''%$P%''

and m.hylbdm || '' '' like ''%$P%''

and m.blqsrq >= to_date(''$P'', ''yyyy-mm-dd'')

and m.blqsrq < to_date(''$P'', ''yyyy-mm-dd'')+1

DB2 SQL:

---------------------

--------------------

--名称:名称库查询

--作者:雷智民

--日期:2006-10-27

--FOR :DB2

--------------------

select m.*

from dj_mcdj m

where m.mcqc || '' '' like ''%%''

and m.xzqhdm || '' '' like ''%%%''

and m.hylbdm || '' '' like ''%%%''

and date(m.blqsrq) >= date(''1900-01-01'')

and date(m.blqsrq) < date(''2050-01-01'')+1 day

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(

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • DB2常用函数与Oracle比较
  • Oracle到DB2的SQL移植解决方案
  • Oracle到DB2移植解决方案
  • DB2中实现Oracle的相关功能

相关文章

  • 2017-06-28IBM DB2前世今生之DB2与IOD
  • 2017-05-11IBM DB2 日常维护汇总(八)
  • 2017-06-28新锐洞察构建智慧的地球
  • 2017-06-28DB2 V8数据库基础(二)
  • 2017-06-28DB2 通用数据库进程全接触
  • 2017-06-28DB2 9数据服务器发展3部曲
  • 2017-06-28数据架构师: 当数据不再受欢迎
  • 2017-06-28调优 DB2 UDB v8.1 及其数据库的最佳实践
  • 2017-06-28DB2 与 Microsoft SQL Server 2000 之间的 SQL 数据复制
  • 2017-06-28IDUG 用户观点: DB2 10 for z/OS

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 开发基于 DB2 Everyplace 产品的快递解决方案
    • 利用表空间的备份快速恢复IBM DB2数据库
    • 浅谈DB2数据库的故障处理及最佳实践
    • 从 SQL 进行操作系统调用
    • 如何在DB2中提高IMPORT性能
    • DB2发展:持续强化XML支持
    • OLTP 应用程序的 DB2 调优技巧
    • 按照事务类型分析DB2事物的性能
    • IBM DB2通用数据库和信息管理
    • DB2 9数据服务器发展3部曲

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有