2011-09-26 3 views
6

R을 사용하여 Oracle 저장 프로 시저를 호출하고 결과 집합을 반환하는 예제를 찾고 있습니다.R에서 Oracle 저장 프로 시저를 호출 - 결과 집합을 얻는 방법?

저는 RJDBC 라이브러리 인 dbGetQuery를 사용하여 Sybase procs를 호출하고 결과를 변수로 지정합니다. 이는 Oracle select stmts에서도 동일하게 작동합니다. 그러나 오라클 저장 프로 시저 (즉, sys_refcursor out 매개 변수)에서 Oracle 결과 세트를 반환하는 방법을 알 수는 없습니다. 오라클에서 데이터를 검색하는 유일한 예는 "select columns from table"입니다. 매우 유망한 소리 - "는 SQL 저장 프로 시저 전화 dbCallProc",하지만 난 그것에 발견 된 모든 심판이 있음을 나타냅니다

구글에서 검색

은 저를 주도했다 "아직 구현되지 않음을." procs 사용을위한 모든 포인터 또는 예제? 대단히 감사합니다. 오라클은 항상 검색 결과 세트의 이러한 도전하는 이유 ....

감사를 몰라, 마이크

UPDATE : 단순히 Oracle 저장 프로 시저라는 예를 취할 것 . Oracle procs는 현재 RJDBC에서 지원되지 않습니다.

+0

아직 구현되지 않은 경우 운이 좋지 않을 것입니다. 출력물을 파일로 덤핑하고 파일을 R에 읽으려고 했습니까? –

+0

나는 이것을하기를 원했던 유일한 사람이라고 생각하지 않았다. 그래서 나는 뭔가를 놓쳤다 고 생각했다. 파일 덤프는 옵션입니다 - 나는 또한 자바에서 proc를 호출하여 rJava로 내 R 코드에 연결할 수 있다고 생각했습니다. 나는 R에서 직접 Sybase proc 호출을 가진 일부 코드를 상속 받았으며 정상적으로 작동합니다. 이제 우리는 오라클로 옮기고 있습니다. 전화를 바꿔주고 싶지만 간단하지는 않습니다. – Mike

+0

https://www.rforge.net/RJDBC/news.html에서 : 저장 프로 시저 호출 JDBC 구문에 대한 지원을 추가하십시오. 현재 IN 매개 변수 만 지원됩니다 ... –

답변

3

특별히 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에서 처리 할 수있는 것처럼 보임).

희망이 있습니다.

관련 문제