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

实用SQL StoredProcedure移植方案

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

第十二步:游标 CURSOR 处理

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

查找关键词:CURSOR

修改点:

如果需要把 CURSOR 返回调用程序,不能关闭它

如果不需要把 CURSOR 返回调用程序,关闭它

DB2 中关闭CURSOR语句: CLOSE cursor-name,把DEALLOCATE CURSOR cursor-name 全局确认替换为 CLOSE cursor-name。

第十三步:update … set … from … 格式语句的等价修改

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

查找关键词:update

修改点:

清单14 :update … set … from … 语法格式

Sybase 语法:
update … set V_1=C_1, V_2=C_2 … from T_1 … where …,

DB2 不支持上述语法,需要改写成如下语法:
update … set (V_1,V_2 ) = 
(select C_1,C_2 From T_1 … Where …) where …

清单15 :update … set … from … 格式语句的等价修改

Sybase代码:
UPDATE T_1 
SET V_1 = T_2_alias.C_1, V_2 = T_2_alias.C_2, V_3 = T_2_alias.C_3
FROM T_2 T_2_alias
WHERE T_1.C_1 = T_2_alias.C_1
AND T_1.C_4=V_4

DB2代码:
UPDATE T_1 T_1_alias
SET (V_1, V_2, V_3) =   
(Select T_2_alias.C_1, T_2_alias.C_2, T_2_alias.C_3 
FROM T_2 T_2_alias
WHERE T_1_alias.C_1 = T_2_alias.C_1 )
Where T_1_alias.C_4 = V_4

注意:上述例子中必须为 T_1 指定别名 T_1_alias ,不能在后面的WHERE条件中使用‘T_1.C_1’。WHERE 条件的如何重写(拆分)需要根据业务逻辑具体确定。

第十四步:临时表的等价修改

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

查找关键词:#

修改点:分两种情况:

情况1,利用 select 语句创建临时表

清单16:利用 select 语句创建临时表

Sybase 代码:
select… into #T_1  from  T_2 where 1=2 
   
DB2 代码:
DECLARE GLOBAL TEMPORARY TABLE 
SESSION.#T_1 as (select … from T_2 )   WITH NO DATA 
CCSID ASCII ON COMMIT DROP TABLE;

情况2,利用 create 语句创建的临时表

清单17:利用 create 语句创建的临时表

Sybase 代码:
create table #T_1(C_1 type,C_2 type, … )
   
DB2 代码:
DECLARE GLOBAL TEMPORARY TABLE SESSION.#T_1(C_1 type,C_2 type, … )
CCSID ASCII ON COMMIT DROP TABLE;

注意:

1.所有引用临时表的地方,必须加上‘SESSION.’, 否则会使用当前的 SQLID

2.ON COMMIT DROP TABLE 表示在 COMMIT 的时候把临时表删除。

3. 要根据具体业务逻辑决定使用 CREATE GLOBAL TEMPORARY TABLE 还是 DECLARE GLOBAL TEMPORARY TABLE。

第十五步:ORDER BY 中带有函数运算问题

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

查找关键词:order by

修改点:

DB2 中 order by Y中不支持函数。例如 ‘order by sum(C_1) desc。根据具体业务逻辑进行等价修改。

第十六步:UNION 问题

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

查找关键词:union

替换词:union all

修改点:

为提高性能(视具体应用程序),将 union 统一替换成 union all

清单18:UNION问题

Sybase 代码:
select C_1 from T_1 union select C_2 from T_2;
   
DB2 代码:
select C_1 from T_1 union all select C_2 from T_2;

第十七步:GROUP BY 中带有非聚合运算涉及的列

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

查找关键词:group by

修改点:

在 DB2 中,group by 中的列必须是聚集函数所涉及的, Sybase 中则不然。我们要根据具体业务逻辑进行等价修改。基本上可以直接去掉 group by 中多余的列。

清单19:GROUP BY 中带有非聚合运算涉及的列

Sybase代码:
select sum(C_1), C_2 from T_1 group by C_1, C_2;
select C_1, C_2 from T_1 group by C_1, C_2;

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