Oracle SQL到DB2 SQL移植解决方案

日期: 2008-06-17 作者:雷智民 来源:TechTarget中国

  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{QYMC}%’
and m.xzqhdm || ’ ’ like ’%$P{XZQH}%’
and m.hylbdm || ’ ’ like ’%$P{HYLB}%’
and m.blqsrq >= to_date(’$P{QSRQ}’, ’yyyy-mm-dd’)
and m.blqsrq < to_date(’$P{JZRQ}’, ’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

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • 在SQL中使用SELECT进行算术运算

    如何在不使用SQL算术运算符而仅仅使用SELECT的情况下完成数学运算,Oracle数据库专家给出了解答。

  • 分析并行SQL中的各个元素

    并行度(DOP)定义了将被创建的执行并行流的数量。最简单的情况,它可以理解为分配为支持你SQL执行的并行伺服进程的数量。

  • SQL Server2005使用CTE实现递归

    递归CTE是由两个最小查询构建的,第一个是定位成员(Anchor Member,AM),它是一个非递归查询,第二个是递归成员(Recursive Member,RM),它是递归查询。

  • 在Oracle里提高SQL执行效率的三种方法

    Oracle提供了多种方法用于减少花在剖析Oracle SQL表达式上的时间,在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能。