您好我已经创建了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
答案 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。