如何在循环后从存储过程返回SYS_REFCURSOR?

时间:2013-11-13 18:42:13

标签: sql oracle cursor

我对Oracle和PL SQL有点新意。我有一个如下的程序。

{
CREATE OR REPLACE PROCEDURE MyProcedure (MyRecordset OUT SYS_REFCURSOR)
AS
BEGIN 
    DECLARE

        CURSOR MyRecordset IS 
        select
        ...
        from table1, table2, etc..

    BEGIN
        FOR Record in MyRecordset
        LOOP        
            --Do something                             
        END LOOP; -- IMPLICIT CLOSE OCCURS
        -- THIS IS WHERE I NEED TO RETURN THE CURSOR. DOES THIS NOT OPEN IT AT BEGINNING AGAIN?
        OPEN MyRecordset;
    END;
END MyProcedure;
/
}

我需要返回一个SYS_REFCURSOR。这够了吗?当我尝试使用Toad中的以下内容进行测试时,我在数据网格中没有输出。

{
DECLARE
 type result_set is ref cursor; 
BEGIN
 BIZTALK.GetCustomerPaymentsDebug(:result_set);
END;
}

1 个答案:

答案 0 :(得分:1)

这个例子适合我。我认为它应该对你有帮助。

 
Declare cursor like:
 TYPE genCurType IS REF CURSOR;

PROCEDURE return_in ( p_ime IN VARCHAR2 , po_seznam OUT genCurType , po_errid OUT errorIdType , po_errmsg OUT errorMsgType ) IS cc_module_name CONSTANT VARCHAR2(60):= 'return_ins'; BEGIN OPEN po_seznam FOR SELECT IME, OPIS, NAZIV, OBRAZEC FROM test WHERE upper(IME) = upper(p_ime); EXCEPTION WHEN OTHERS THEN po_errid := SQLCODE; po_errmsg := 'Poizvedba ni bila uspešna! ('||SQLERRM||''||gc_package||'.'||cc_module_name||')';

END;