sql >> Base de Datos >  >> RDS >> Oracle

llamar a los procedimientos almacenados de Oracle en R:¿cómo obtener el conjunto de resultados?

No puedo ayudarlo específicamente con R, pero dice que tiene problemas para llamar a los procedimientos de Oracle que usan parámetros OUT como sys_refcursors. También indica que es posible que esta capacidad aún no esté implementada. Sin embargo, dice que puede "seleccionar columnas de la tabla" muy bien.

Por lo tanto, propongo cambiar los procedimientos a llamadas de función canalizadas y luego hacer una selección simple para obtener sus datos de Oracle. Un pequeño ejemplo:

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;

El cuerpo del paquete:

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;

Uso:

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

O:

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

Esto devolvería 3 filas de datos, al igual que un procedimiento devolvería los mismos datos. Solo de esta manera puede obtenerlo de una declaración de selección (que parece poder manejar desde R).

Espero que ayude.