вызов хранимых процедур Oracle в R - как получить набор результатов?

Ищем пример вызова хранимой процедуры Oracle с использованием R и возврата набора результатов.

Я использую библиотеку RJDBC, dbGetQuery для вызова процессов Sybase и указания результатов на переменную, и это работает так же для Oracle select stmts. Однако я не понимаю, как заставить это возвращать наборы результатов Oracle из хранимой процедуры Oracle (т. Е. Из параметра sys_refcursor out). Единственные примеры, которые я нашел для извлечения данных из Oracle, включают «выбор столбцов из таблицы».

Поиск в Google привел меня к «dbCallProc — вызов хранимой процедуры SQL», что звучит очень многообещающе, но каждая найденная ссылка указывает на то, что она «еще не реализована»."

Любые указатели или примеры использования процедур? Очень ценится. Не знаю, почему Oracle всегда должен быть такой проблемой для получения наборов результатов....

Спасибо, Майк

ОБНОВЛЕНИЕ: я бы взял пример, который просто вызывает хранимую процедуру Oracle. Являются ли процедуры Oracle просто не поддерживаемыми в настоящее время в RJDBC?


person Mike    schedule 26.09.2011    source источник
comment
Если он еще не реализован, то вам, вероятно, не повезло. Вы пытались сбросить вывод в файл, а затем прочитать файл в R?   -  person    schedule 28.09.2011
comment
Я просто не верил, что я единственный человек, который хотел это сделать, поэтому думал, что что-то упускаю. Дамп файла - это вариант - я также думал, что могу вызвать процедуру в java и связать ее с моим R-кодом с помощью rJava. Я унаследовал некоторый код, который имеет прямые вызовы процедур Sybase в R, и это прекрасно работает. Теперь мы переходим на Oracle, и я просто хотел поменять местами свои звонки, но, видимо, не все так просто.   -  person Mike    schedule 28.09.2011
comment
Из rforge.net/RJDBC/news.html: добавить поддержку вызова хранимой процедуры JDBC. синтаксис. В настоящее время поддерживаются только параметры IN...   -  person Marmite Bomber    schedule 26.06.2016


Ответы (1)


Я не могу помочь вам конкретно с R, но вы говорите, что у вас проблемы с вызовом процедур Oracle, которые используют параметры OUT как sys_refcursors. Вы также указываете, что эта возможность может быть еще не реализована. Однако вы говорите, что можете «выбирать столбцы из таблицы» просто отлично.

Итак, я предлагаю изменить процедуры на конвейерные вызовы функций, а затем выполнить простой выбор, чтобы получить данные из Oracle. Небольшой пример:

CREATE OR REPLACE package pkg1 as

  type t_my_rec is record
  (
    num my_table.num%type,
    val my_table.val%type
  );

  type t_my_tab is table of t_my_rec;

  function get_recs(i_rownum in number)
      return t_my_tab
      pipelined;

END pkg1;

Тело пакета:

create or replace package body pkg1 as

  function get_recs(i_rownum in number)
      return t_my_tab
      pipelined
  IS
    my_rec t_my_rec;
  begin

    -- get some data
    -- implement same business logic as in procedure
    for my_rec in (select num, val from my_table where rownum <= i_rownum)
    loop
      pipe row(my_rec);
    end loop;
    return; 

  end get_recs;

end pkg1;

Использование:

select * from table(pkg1.get_recs(3));

Or:

select num, val from table(pkg1.get_recs(3));

Это вернет 3 строки данных, точно так же, как процедура вернет те же данные. Только таким образом вы можете получить его из оператора select (который, похоже, вы можете обрабатывать из R).

Надеюсь, это поможет.

person tbone    schedule 07.02.2012