Миграция хранимой процедуры с помощью REF CURSOR из Oracle в DB2 - PullRequest
0 голосов
/ 11 августа 2010

В настоящее время я переношу пакет процедур из Oracle в DB2 с помощью IBM Migration Toolkit .К сожалению, MTK подавляет пользовательские типы, такие как:

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

Каким был бы идиоматический способ переноса этих операторов в DB2?

1 Ответ

1 голос
/ 11 августа 2010

Это аналог табличных функций DB2, но без указания списка столбцов.

например. что-то вроде этого:

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 (например, см. здесь ).

Поскольку объявление является слабым типом, а у DB2 (насколько я знаю) нет аналога для sys_refcursor, автоматическое преобразование не может решить, как преобразовать такие объявления.

Единственный способ преобразовать его - это просмотреть хранимую процедуру и вручную восстановить набор полей, возвращаемых курсором. Затем вы можете переписать декларацию Oracle с помощью строго типизированного курсора и обработать ее с помощью MTK. Или вручную переписать логику на стороне DB2 ...


Обновление:

  1. DB2 поддерживает слабые курсоры.
  2. Решения для проблем совместимости миграции, описанные в книге IBM, доступны здесь (ВНИМАНИЕ: .PDF файл около 3,18 МБ). ищите строку "ref_cursor" здесь.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...