0

我对 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;
}
4

1 回答 1

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;

于 2013-11-24T12:27:34.790 回答