您的位置:首页 > 数据库

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

2012-02-14 15:56 190 查看

简单有效的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: