从oracle过程获取返回
您好,我已经创建了一个oracle过程,其中只包含带有选择项的联合。该过程是使用以下参数创建的:从oracle过程获取返回,oracle,stored-procedures,Oracle,Stored Procedures,您好,我已经创建了一个oracle过程,其中只包含带有选择项的联合。该过程是使用以下参数创建的: PROCEDURE mp_prov_preview(pDateFrom IN DATE, pDateTo IN DATE, preturn_cursor OUT spdutil.tref_cursor) IS v_cursor spdutil.tref_c
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;
另外,我正在使用plsql假设您有这样一个过程:
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。这是因为您对结果不做任何操作。对于过程,“输出”结果定义为OUT参数,在您的例子中是
preturn\u cursor OUT spdutil.tref\u cursor
调用过程后,您必须使用此变量并在其上循环。因为这是一个查询的结果,只有联合。你可以添加一个关于OUT参数的解释,因为它似乎是他不理解的。