我目前正在IBM Migration Toolkit的帮助下将一系列程序从Oracle迁移到DB2。不幸的是,MTK对自定义类型感到窒息,例如:
TYPE G_reference_cursor IS REF_CURSOR
...
FUNCTION do_some_stuff
RETURN g_reference_cursor
...
将这些语句迁移到DB2的惯用方法是什么?
答案 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端手动重写逻辑......
<强>更新强>