2

我正在尝试执行一个包过程,它有几个 in 参数和一个 REF CURSOR out 参数,但似乎无法为TORA弄清楚(我的 SQL IDE)

这是我想执行并查看光标的过程的人为示例:

PROCEDURE get_peeps_in_city ( pi_city IN varchar(100), po_recordset OUT REF CURSOR )
    IS
    BEGIN
         OPEN po_recordset
         FOR Select Id, 
                FName, 
                LName
             FROM People
             WHERE City like '%' || pi_city || '%'
    END;

这是我迄今为止尝试过的:

DECLARE
    v_cursor REF CURSOR;
BEGIN
    execute PKG_PEEPS.get_peeps_in_city('Chicago', v_cursor);
END

我得到的错误类似于:

PLS-00103:在预期以下情况之一时遇到符号“END”:开始函数包杂注过程子类型类型使用当前光标

4

1 回答 1

3

您可能正在寻找这样的东西:

DECLARE
    v_cursor SYS_REFCURSOR;
    v_Id NUMBER;
    v_FName VARCHAR2(200);
    v_LName VARCHAR2(200);
BEGIN
    PKG_PEEPS.get_peeps_in_city('Chicago', v_cursor);

    LOOP
      FETCH v_cursor INTO v_Id, v_FName, v_LName;
      EXIT WHEN v_cursor%NOTFOUND;
        -- do something with v_Id, v_FName, v_LName
    END LOOP;
    CLOSE v_cursor;
END;
/

更新:

您可能希望查询结果显示在 IDE 中,就像您直接运行 SELECT 语句一样。上面的代码不会发生这种情况,我不知道有任何代码可以实现这一点(除非您安装特定的表函数)。

您可以做的最好的事情是在循环中输出检索到的数据(使用DBMS_OUTPUT.PUT_LINE)。

于 2011-08-10T18:07:08.637 回答