2009-05-15 7 views
1

우리 애플리케이션이 oracle 저장 프로 시저에서 oracle .net 프로 바이더로 정보를 전달하는 표준 방식은 out ref cursor 매개 변수를 통해 이루어집니다. 과거 오라클 - 저장 프로 시저에서 참조 커서 매개 변수를 사용하는 방법?

패키지로 사용되는 우리의 모든 저장 프로 시저와 같은 것을했다 : 이제

CREATE OR REPLACE PACKAGE test_package IS 
    TYPE refcur IS REF CURSOR; 
    PROCEDURE get_info (o_cursor   OUT  refcur); 
END test_package; 
/
CREATE OR REPLACE PACKAGE BODY test_package IS 
    PROCEDURE get_info (o_cursor   OUT  refcur) AS 
    BEGIN 
    OPEN o_cursor FOR 
     SELECT * FROM v$database; 
    END get_info; 
END test_package; 
/

I 패키지에서하고 정기적 절차하지만 돈으로 그 get_info 절차를 이동하고 싶습니다를 refcur 유형을 얻으려면 무엇을해야할지 알지 못합니다. 패키지 범위 밖에서 어떻게 만들 수 있습니까?

만들기 또는 바꾸기 유형 refcur IS REF CURSOR;

이 작동하지 않습니다.

답변

8

내가 여기 (NO 오라클) 테스트 할 수 없습니다하지만 당신은 할 수 있습니다 :

create or replace procedure get_info(p_cursor out sys_refcursor) 
is 
begin 
    open p_cursor for 
    select * 
    from v$database; 
end; 
/

오라클 9에서 더 이상 TYPE의 result_crsr를 선언 할 필요가 높은 것은 REF CURSOR

입니다 대신 sys_refcursor을 사용하십시오.

0
TYPE result_crsr IS REF CURSOR; 

의 Ref 커서를 사용하여 SQL의 익명 블록의 예 : 시도

DECLARE 
    TYPE result_crsr IS REF CURSOR; 
    crsr_test_result result_crsr; 
BEGIN 


    OPEN crsr_test_result FOR 
     SELECT * from user_objects; 
    ? := crsr_test_result; 
END; 
+0

? : = crsr_test_result 행은 Java JDBC 응용 프로그램이 sql의이 블록을 호출하고 참조 커서를 가져 오기 때문입니다. 그것의 내 짧은 - 손 기법을 때 내가 뭔가를 성취하고 싶어/SQL에서 자바에서 저장 프로 시저에 논리를 배치하지 않고. 그러나 저장 프로 시저와 마찬가지로 쉽게 사용할 수 있습니다. –

+0

입력란에 범위를 만드는 refcur 유형의 매개 변수가 있어야하기 때문에 그럴 수 없다고 생각합니다. –

0

을이 :

CREATE OR REPLACE PROCEDURE get_info(o_cursor OUT sys_refcursor) IS 
BEGIN 
    OPEN o_cursor FOR SELECT * FROM dual; 
END; 
/

귀하의 질문은이 두 가지 중요한 질문을 제기한다 :

1) 당신은 그것이 "작동하지 않는다"고 말한다. 나는 오라클이 당신이 그 명령문을 실행할 때 예외를 반환하고 있다는 것을 의미한다. 오라클이 반환하는 오류 메시지는 무엇입니까? ORA-nnnnn으로 시작해야하고 텍스트가옵니다.

2) PROCEDURE를 패키지 밖으로 옮겨서 어떤 목적을 달성 할 수 있습니까? 패키지에는 몇 줄의 코드가 추가되어 있으며 패키지 사양과 패키지 본문에 반복되는 프로 시저 서명이 있지만 패키지 내에 프로 시저를 포함하면 여러 가지 중요한 이점을 제공합니다.

+0

Q1 : 오류 줄 1, 열 23, 끝 줄 1, 끝 _ 열 25, 발견 'REF', Expecting : 배열 객체 OPAQUE TABLE VARRAY VARYING Q2 -이 응용 프로그램에서 사용하는 저장 프로 시저가 몇 개 뿐이며 새 오라클 사용자로 모두 이동 중이므로 패키지가 필요하지 않습니다. –

관련 문제