- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle数据库迁移到DB2数据库的技巧和注意点
IBM 应用开发合作中心
PAGE 8/ NUMPAGES 8
Oracle2DB2的技巧和注意点
一、针对数据库:
在存储过程中见分区。
在建表时使用多纬索引,使用时就不必再建了。
insert into ... with t1 as (select ) , t2 as (select ) select .. from t1,t2 ..
MTK无法自动转换,但DB2是支持此种写发的,需要手工在emdb.db2文件中修改。
重复定义,可能是大小写问题。
在使用mtk从数据库中抽取数据时,排除重复的对象。
‘=’号两边类型必须一致.
Union操作的前后的表里的字段取名必须一致.
外连接操作两边不能使用自定义函数.
多个表做cross join后,引用同一名字的字段前要加前缀。
修改emdb.src,在字段前加上表名。
定义一个package作为动态游标,返回结果集。
DB2中需要改写成定义一个返回结果集的存储过程,例如:
CREATE PROCEDURE DB2ADMIN.RETURN_RESULTSET_PROC1 (inout inout_ret int )
DYNAMIC RESULT SETS 1
-- 在cursor中使用with语句,需要改写,
-- 返回结果集
P1: BEGIN
declare stmt varchar(1024);
--declare cur_1 cursor for (with t1 as (select id,name from staff),t2 as (select id,name from staff) select t1.id, from t2 left join t1 on t1.id=t2.id);
declare cur_1 cursor WITH RETURN TO CALLER for select t1.id from (select id,name from staff) as t2 left join (select id,name from staff) as t1 on t1.id=t2.id;
open cur_1;
END P1
CREATE PROCEDURE CALL_PROC_WITHR_ESULTSET_PROC1(INOUT total INT)
LANGUAGE SQL
-- 调用带返回结果集的存储过程
BEGIN
DECLARE a, sqlcode INT DEFAULT 0;
DECLARE LOC1 RESULT_SET_LOCATOR VARYING;
SET total = 0;
CALL RETURN_RESULTSET_PROC1(a);
ASSOCIATE RESULT SET LOCATOR( LOC1) WITH
PROCEDURE RETURN_RESULTSET_PROC1;
ALLOCATE C1 CURSOR FOR RESULT SET LOC1;
FETCH FROM C1 INTO a;
WHILE sqlcode = 0 DO
SET total = total + a;
FETCH FROM C1 INTO a;
END WHILE;
END
6.存储过程中嵌套存储过程的申明。
DB2不支持在存储过程中申明临时的存储过程,只能单独申明。
7.使用DBMS_SQL函数创建一个带insert ... select ... 语句的游标,并能够计算插入的记录个数。
CREATE PROCEDURE DB2ADMIN.DYNCURSORPROC2 (in in_param varchar(100),out out_ret int )
--DYNAMIC RESULT SETS 1
-- 动态SQL存储过程
P1: BEGIN
declare stmt varchar(1024);
declare cur_1 cursor for s1;
set stmt=(select id from staff where name=||in_param||);
prepare s1 from stmt;
open cur_1;
fetch cur_1 into out_ret;
close cur_1;
END P1
CREATE PROCEDURE GETROWCOUNT (IN in_id SMALLINT)
-- 获取更新的记录数
BEGIN
DECLARE SQLSTATE CHAR(5);
DECLARE rcount INTEGER;
文档评论(0)