【IT168 技术】为了使得将数据库和应用程序从Oracle数据库产品迁移到IBM DB2更方便,本文具体探讨在迁移过程中的一些常见问题以及,ORACLE数据库移植到DB2中的变量定义、空值处理、隐形转换、时间函数及DECODE函数的解决。
变量定义和BEGIN END
DB2中变量定义在BEGIN END体内,并且每个变量都要用DECLARE声明;存储过程结束时,END后跟P1,并且不需要分号。
Oracle中变量定义必须在BEGIN END体外,变量都不需要用DECLARE声明(有种说法是,第一个变量需要DECLARE,其他变量不需要);存储过程结束时,END后跟存储过程的名称,并且需要分号。
DB2:
LANGUAGE SQL
P1: BEGIN
--变量定义
DECLARE INSERT_DATE TIMESTAMP;
DECLARE ALLDEPT_NO VARCHAR(20);
--具体操作
SELECT a FROM TAB_1;
.........
END P1
Oracle:
IS
--变量定义
INSERT_DATE TIMESTAMP;
ALLDEPT_NO VARCHAR(20);
BEGIN
--具体操作
SELECT a FROM TAB_1;
.........
END PRO1;
空值的处理
Oracle空值处理通过 nvl 函数实现,DB2中通过COALESCE函数实现。在DB2 V9.5中已经实现了 NVL 函数。
在Oracle中,对于null数据的处理比较灵活,在与NULL值进行比较和拼接时与DB2的结果完全不同,例如:
ORACLE得到 abc 的结果。
在DB2中为null,要想得到 abc 的结果,按照如下语法修改,
还有在Oracle中select * from table where id = null这种语法是允许的,在DB2中不可。但需要说明的是在Oracle中虽然select * from table where id = null是可以通过语法检查,但与select * from table where id is null语句得到结果集是不同的,所以在移植时要考虑真实的业务意义,在翻译成DB2的语法。
另外有些应用有如下用法:
在DB2中可翻译为: