首页 > 解决方案 > 从 PROCEDURE BY SELECT 返回 REF CURSOR

问题描述

我需要在选择语句中返回参考光标。我使用下面的代码我需要另一种类型来返回数据。抱歉,我删除了一些输出变量的代码(参考游标中返回的真实列数为14),但需要任何类型来轻松返回数据以检查它是否正常工作。

        DECLARE
           TYPE rc IS REF CURSOR;
           v_cur                      rc;                --declare ref cursor variable
           LIST_ID                    VARCHAR2 (250);
           PERSON_NO                  VARCHAR2 (250);

        BEGIN
           MOI_SERVICES.HCR_INQUIRIES_PKG.GET_SUSPECTED_LIST_PRC (148608947,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  NULL,
                                                                  v_cur,
                                                                  V_STAUS, -- 0 FAIL -- 1 SUCCESS
                                                                  V_MSG);


           LOOP
              FETCH v_cur
                  INTO LIST_ID,
                      PERSON_NO;
                EXIT WHEN v_cur%NOTFOUND;

         DBMS_OUTPUT.put_line (
                    'LIST_ID = '
                 ||LIST_ID 

                END LOOP;

              CLOSE v_cur;
             END;  

标签: oracle

解决方案


REF CURSOR 的想法是您打开游标,但无论谁打电话给您,都会进行获取和关闭。使用 SQL*Plus 或 Oracle SQL Developer,这里是一个使用匿名 PL/SQL 的简单示例;“打印”命令执行获取、显示和光标关闭。

SQL> var rc refcursor;
SQL> begin
  2    open :rc for select * from dual;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> print :rc

D
-
X

调用函数如下所示:

SQL> create or replace function f return sys_refcursor is
  2    l_rc sys_refcursor;
  3  begin
  4    open l_rc for select * from dual;
  5    return l_rc;
  6  end f;
  7  /

Function F compiled

SQL> exec :rc := f;

PL/SQL procedure successfully completed.

SQL> print :rc;

D
-
X

最好的问候,炖阿什顿


推荐阅读