【问题标题】:Migrating a stored procedure using REF CURSOR from Oracle to DB2使用 REF CURSOR 将存储过程从 Oracle 迁移到 DB2
【发布时间】:2010-08-11 08:35:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: oracle stored-procedures db2


    【解决方案1】:

    这类似于 DB2 表函数,但没有指定列列表。

    例如类似的东西:

    create function do_some_stuff() returns table( <column_list> ) 
    language sql
    begin atomic 
    
      return 
        select t.* from some_table t;
    
    end@
    

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

    基于 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”字符串。

    【讨论】:

    • 谢谢。您似乎暗示 MTK 将能够处理强类型游标。对吗?
    • 抱歉,我没有足够的 DB2 经验,但对于您关于 MTK 功能的问题已经得到了一些答案 - 查看答案更新。
    猜你喜欢
    • 2022-07-21
    • 2012-01-13
    • 2012-01-23
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多