使用REF CURSOR将存储过程从Oracle迁移到DB2

时间:2010-08-11 08:35:37

标签: oracle stored-procedures db2

我目前正在IBM Migration Toolkit的帮助下将一系列程序从Oracle迁移到DB2。不幸的是,MTK对自定义类型感到窒息,例如:

TYPE G_reference_cursor IS REF_CURSOR
...
FUNCTION do_some_stuff
  RETURN g_reference_cursor
...

将这些语句迁移到DB2的惯用方法是什么?

1 个答案:

答案 0 :(得分:1)

这类似于DB2表函数,但没有列列表的规范。

E.g。类似的东西:

create function do_some_stuff() returns table( <column_list> ) 
language sql
begin atomic 

  return 
    select t.* from some_table t;

end@

没有<column_list>规范。 根据传入的参数和内部逻辑,这些函数可以返回具有不同字段集的表。 在大多数情况下,这种类型的函数结果用于将结果返回给客户端。

基于REF_CURSOR声明类型只是在Oracle 8上执行此类操作的方法,但由于Oracle 9i有内置类型sys_refcursor(例如,请参阅here)。

因为声明是弱类型的,并且DB2(据我所知)没有sys_refcursor的模拟,所以自动转换无法决定如何转换这样的声明。

转换它的唯一方法是查看存储过程并手动重建游标中返回的字段集。然后,您可以使用强类型游标重写Oracle声明并使用MTK处理它。或者在DB2端手动重写逻辑......


<强>更新

  1. DB2支持弱类型游标。
  2. IBM手册中描述的迁移兼容性问题解决方案,可用here(警告:.PDF文件大约3.18MB)。在这里搜索“ref_cursor”字符串。