简单有效的SQL 存储过程移植方案(2)——从Sybase 到DB2

来源:互联网 发布:mac口红什么颜色好看 编辑:程序博客网 时间:2024/05/22 23:09

简单有效的SQL Stored Procedure移植方案 (2)

简单有效的SQL Stored Procedure移植方案 (2)

第六步:修改 DECLARE 语句


方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:DECLARE


修改点:


为所有类型添加 DEFAULT 值,

DEFAULT‘’ -- for Char or Varchar

DEFAULT 0; -- for int

DEFAULT 0.0; -- for numeric

◆为 char 和 varchar 添加 CCSID ASCII。

◆如果函数体中间部分也存在 DECLARE 语句(比如 DECLARE CURSOR ),必须把它移到程序开始处。

注意: DB2 中所有 DECLARE 语句必须位于程序开始处。并且必须遵循以下顺序:


1. SQL variable and condition declarations


2. Statement declarations


3. Cursor declarations


4. Handler declarations


5. Any valid statements for an SQL procedure body




第七步:多行注释等价改写成多个单行


方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:/*


修改点:使用‘--’进行逐行单行注释( DB2 不支持多行注释)。




第八步:IF 语句的等价修改


方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:IF


修改点:分两种语句格式:

清单6 :多行注释等价改写成多个单行


第一种语句格式:
Sybase代码:
IF … BEGIN ……END  

DB2代码:
IF …THEN
BEGIN …… END ;
END IF;

第二种语句格式:
Sybase代码:
IF … BEGIN ……END 
ELSE BEGIN ……END

DB2代码:
IF … THEN
BEGIN …… END ;
ELSE
BEGIN …… END;
END IF;



第九步:在句末加上‘;’


方法:在每一个完整的语句末尾添加‘;’表示语句的分隔。




第十步: 普通 FUNCTION 替换


方法:方法2,全局查找,逐个确认替换。有时+表示数据相加,不能替换。


查找关键词:+  //这里表示字符串变量的连接


替换词:||




方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:CONVERT


替换词:CAST


修改点:

清单7 :在句末加上‘;’


Sybase 代码:
CONVERT( DataType , V_1 )

DB2 代码:
CAST( V_1 as DataType )


方法:方法2,全局查找,逐个确认替换。


查找关键词:DATEDIFF


替换词:待定




方法:方法2,全局查找,逐个确认替换。


查找关键词:DATEADD


替换词:待定




方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:"


替换词:'


注意:若是表示字符串,直接替为'。但是有时两个单引号表示字符串内部的一个单引号,这是不能替换。




方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:SQUARE


修改点: DB2 不支持函数 SQUARE,需要重新改写。

清单8 :改写对函数 SQUARE 的支持


Sybase 代码:
SQUARE (V_1)

DB2 代码:
V_1 * V_1


方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:SQRT


修改点:进行开平方运算时可能会出现精度不够,导致数据误差,需要根据具体情况改写。

清单9:修改关键词SQRT


Sybase 代码:
SQRT ( V_1 / V_2)

DB2 代码:
SQRT ( V_1 / 1000000 / V_2) * 1000







方法:方法3,全局查找,逐个确认,手工修改。


查找关键词:NULL


修改点:分两种情况:


情况1:表示判断是否为 NULL 的语句。

清单10:关键词NULL情况1


Sybase 代码:
Where V_1 = NULL

DB2 代码:
Where V_1 is NULL









情况2:在如下格式的语句‘insert into … select … ,NULL , … from … ’中, select 子句中 NULL 作为插入的值,但 DB2 不支持这种语法,去掉该列,默认插入值即为 NULL 值.



清单11:关键词NULL情况2


Sybase 代码:
insert into T_1(C_1,C_2) select C_1,NULL from T_2;

DB2 代码:
insert into T_1(C_1) select C_1 from T_2;









第十一步:getdate() 函数替换


getdate() 用于获取不同格式的时间表达。


CONVERT(CHAR, GETDATE(), 112) 时间格式为 YYYYMMDD


CONVERT(CHAR, GETDATE(), 108) 时间格式为 HHMISS




情况1:不在乎时间的格式,可以直接替换。


方法:方法2,全局查找,逐个确认替换。


查找关键词:getdate()


替换词:CURRENT TIMESTAMP



清单12:getdate()函数替换情况1


Sybase 代码:
SELECT @v_1 = GETDATE() ;

DB2 代码:
SET v_1 = TIMESTAMP

 

 

转自:http://www.vstcn.net/JiShuWenZhangShow.asp?ID=742