我对从事SQL工作非常陌生。我想知道如何在PL / SQL的存储过程中返回选择语句。
到目前为止,我的理解(很少)是我应该将数据返回值放在表中,并将表中的数据分配给参考游标。加载完后,然后通过REF光标进行LOOP并将数据显示回去吗?
实际上,将其转换为存储过程的代码已经使我完全迷失了,几乎没有多少用例来说明我的用例。任何帮助表示赞赏。
非常感谢:)
答案 0 :(得分:1)
这是一个示例:过程只有一个-OUT
-参数,它是一个反射器:
SQL> create or replace procedure p_test (par_rc out sys_refcursor)
2 is
3 begin
4 open par_rc for select deptno, dname, loc from dept;
5 end;
6 /
Procedure created.
为了调用这样的过程,您需要将结果存储到某些东西中。为此,我将声明一个变量(在本示例中使用的工具SQL * Plus中),并使用begin-end
块调用该过程,并提供变量名称作为其参数:>
SQL> var l_rc refcursor;
SQL>
SQL> begin
2 p_test (:l_rc);
3 end;
4 /
PL/SQL procedure successfully completed.
打印结果:
SQL> print l_rc
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
可能还有其他选择,具体取决于您的实际工作。
答案 1 :(得分:1)
通常,存储过程用于对数据库中的数据进行操作,而函数则用于返回值或数据。如果您只是想在存储过程中使用select语句,则需要使用游标,该游标就像在过程开始时声明的其他任何变量一样,然后在该过程中隐式或显式打开该游标。过程代码。
隐式游标的示例:
declare
cursor sample_cur is --this can be your select statement
select sysdate as today from dual;
begin
for rec in sample_cur loop
-- step by step for each record you return in your cursor
dbms_output.put_line(rec.today);
end loop;
end;