Oracle
 sql >> Base de données >  >> RDS >> Oracle

appeler les procédures stockées Oracle dans R - comment obtenir le jeu de résultats ?

Je ne peux pas vous aider spécifiquement avec R, mais vous dites que vous rencontrez des problèmes pour appeler des procédures Oracle qui utilisent des paramètres OUT en tant que sys_refcursors. Vous indiquez également que cette capacité n'est peut-être pas encore implémentée. Vous dites, cependant, que vous pouvez très bien "sélectionner les colonnes du tableau".

Donc, je propose de changer les procédures en appels de fonction en pipeline, puis de faire une simple sélection pour obtenir vos données d'Oracle. Un petit exemple :

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;

Le corps du paquet :

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;

Utilisation :

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

Ou :

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

Cela renverrait 3 lignes de données, tout comme une procédure renverrait les mêmes données. Ce n'est qu'ainsi que vous pouvez l'obtenir à partir d'une instruction select (que vous semblez être capable de gérer depuis R).

J'espère que ça aide.