Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aufrufen von gespeicherten Oracle-Prozeduren in R - wie bekomme ich die Ergebnismenge?

Ich kann Ihnen nicht speziell mit R helfen, aber Sie sagen, Sie haben Probleme beim Aufrufen von Oracle-Prozeduren, die OUT-Parameter als sys_refcursors verwenden. Sie geben auch an, dass diese Fähigkeit möglicherweise noch nicht implementiert ist. Sie sagen jedoch, dass Sie problemlos "Spalten aus der Tabelle auswählen" können.

Daher schlage ich vor, die Prozeduren in Pipeline-Funktionsaufrufe zu ändern und dann eine einfache Auswahl zu treffen, um Ihre Daten von Oracle zu erhalten. Ein kleines Beispiel:

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;

Der Paketkörper:

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;

Verwendung:

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

Oder:

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

Dies würde 3 Datenzeilen zurückgeben, genau wie eine Prozedur dieselben Daten zurückgeben würde. Nur auf diese Weise können Sie es aus einer Select-Anweisung erhalten (die Sie anscheinend von R aus handhaben können).

Hoffe das hilft.