简单有效的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
相关文章推荐
- 简单有效的SQL 存储过程移植方案(1)——从Sybase 到DB2
- 简单有效的SQL 存储过程移植方案(3)——从Sybase 到DB2
- 简单有效的分页存储过程
- sql存储过程简单教程
- 简单的sql登录和注册存储过程
- DB2 SQL存储过程语法官方权威指南(翻译)
- 简单搞一下 Oracle 存储过程动态SQL之获取查询分页!
- Sybase 存储过程迁移至DB2错误集锦——不断更新
- 一个简单的SQl存储过程分页
- sql存储过程几个简单例子(一)
- sql存储过程几个简单例子
- 解决sybase存储过程中不能取得动态sql输出参数的问题
- Sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环
- SQL____一个简单的存储过程
- access下的分页方案(仿sql存储过程)
- 一个sql的存储过程的简单示例
- ASP.NET 2.0 新手SQL存储过程简单实例入门。绝对经典入门
- oracle 简单存储过程及在PL/Sql中执行
- 关于存储过程和函数异常出现和JAVA捕获简单处理方案
- sql server 存储过程的简单使用