从oracle程序获得返回

时间:2017-01-24 11:58:55

标签: oracle stored-procedures

您好我已经创建了oracle程序,其中只有带有Selects的联合。使用此参数创建过程:

PROCEDURE mp_prov_preview(pDateFrom      IN DATE,
                            pDateTo        IN DATE,
                            preturn_cursor OUT spdutil.tref_cursor) IS

    v_cursor spdutil.tref_cursor;

我不明白的是如何从程序中获取返回结果集。我正在使用pl sql。我试过这种方式,然后执行但结果没有显示。

begin
  -- Call the procedure
  mp_prov_preview('01-oct-2016',
                  '31-oct-2016',
                   :preturn_cursor);
end;

PS。我正在使用plsql

1 个答案:

答案 0 :(得分:3)

假设你有这样的程序:

create or replace procedure cursorOut ( pIn  IN     number,
                                        pOut    OUT sys_refcursor
                                      ) is
begin
    open  pOut for select pIn       from dual union
                   select pIn * 100 from dual;
end;

在SQLPlus中,您可以使用以下命令调用它:

SQL> variable vCurs REFCURSOR
SQL> exec cursorOut ( 1, :vCurs);

PL/SQL procedure successfully completed.

SQL> print :vCurs

       :B1
----------
         1
       100

这将只打印查询结果;如果您需要对查询返回的数据执行更多操作,可以使用PL / SQL块:

declare
    vCurs sys_refcursor;
    vVar  number;
begin
    cursorOut ( 1, vCurs);
    loop
        fetch vCurs
        into vVar;
        exit when vCurs%NOTFOUND;
        dbms_output.put_line(vVar);
    end loop;
end;

两种方式,您使用OUT参数来获取程序构建的光标,然后使用该光标执行某些操作。

第一种方式是特定于客户端(我使用SQLPlus),并为您提供了一个可以使用PRINT命令轻松打印的变量(同样,在SQLPlus中)。

在第二种方法中,您有一个PL / SQL变量,可用于构建循环并扫描每一行以根据结果数据执行某些操作。这不依赖于客户端,因为它只使用PL / SQL。