sql >> データベース >  >> RDS >> Oracle

RでOracleストアドプロシージャを呼び出す-結果セットを取得する方法は?

    特にRについてはお役に立てませんが、OUTパラメータをsys_refcursorsとして使用するOracleプロシージャの呼び出しで問題が発生しているとのことです。また、この機能はまだ実装されていない可能性があることも示しています。ただし、「テーブルから列を選択する」ことは問題なくできると言っています。

    したがって、プロシージャをパイプライン化された関数呼び出しに変更してから、単純な選択を実行して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));
    

    または:

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

    これにより、プロシージャが同じデータを返すのと同じように、3行のデータが返されます。この方法でのみ、selectステートメント(Rから処理できるようです)から取得できます。

    お役に立てば幸いです。




    1. PHPMyAdminで一時テーブルが機能しない

    2. Oracle構文は3つ以上のテーブルを左結合します

    3. PHPプリペアドステートメントログイン

    4. 単一のクエリでのRubymysql2の複数のステートメント