新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > sql server教程 > 正文:实用SQL StoredProcedure移植方案

实用SQL StoredProcedure移植方案

新客网 XKER.COM 2008-07-03 来源:赛迪网 收藏本文

第六步:修改 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;

 

情况2:在乎时间的格式,需要具体情况具体改写。

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

查找关键词:getdate()

清单13:getdate() 函数替换情况2

Sybase 代码:
CONVERT(CHAR, GETDATE(), 112) 
   
DB2 代码:
varchar_format(CURRENT TIMESTAMP,'YYYYMMDD')

Sybase 代码:
CONVERT(CHAR, GETDATE(), 108)
            
DB2 代码:
varchar_format (CURRENT TIMESTAMP,'HH24MISS')

注意: DB2 函数 varchar_format 还支持格式 'YYYYMMDDHH24MISS':

varchar_format(CURRENT TIMESTAMP,'YYYYMMDDHH24MISS')

共3页: 上一页 [1] [2] [3] 下一页
标签:移植   StoredProcedure   SQL  
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
推荐阅读
阅读排行
随机推荐
实用信息推荐