sql >> Databasteknik >  >> RDS >> Oracle

anropa Oracles lagrade procedurer i R - hur får man resultatet?

Jag kan inte hjälpa dig specifikt med R, men du säger att du har problem med att anropa Oracle-procedurer som använder OUT-parametrar som sys_refcursors. Du anger också att denna förmåga kanske inte är implementerad ännu. Du säger dock att du kan "välja kolumner från tabell" alldeles utmärkt.

Så jag föreslår att du ändrar procedurerna till funktionsanrop i pipeline och sedan gör ett enkelt val för att hämta dina data från Oracle. Ett litet exempel:

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;

Paketets text:

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;

Användning:

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

Eller:

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

Detta skulle returnera 3 rader med data, precis som en procedur skulle returnera samma data. Endast på detta sätt kan du få det från en select-sats (som du verkar kunna hantera från R).

Hoppas det hjälper.




  1. Laravel 4:Where Not Exists

  2. SQL ansluter

  3. Range Fyllningstabell

  4. PostgreSQL-scheman / namnutrymmen med Django