PL / SQL存储过程-从表返回记录

时间:2020-01-06 14:57:07

标签: oracle stored-procedures plsql

我对从事SQL工作非常陌生。我想知道如何在PL / SQL的存储过程中返回选择语句。

到目前为止,我的理解(很少)是我应该将数据返回值放在表中,并将表中的数据分配给参考游标。加载完后,然后通过REF光标进行LOOP并将数据显示回去吗?

实际上,将其转换为存储过程的代码已经使我完全迷失了,几乎没有多少用例来说明我的用例。任何帮助表示赞赏。

非常感谢:)

2 个答案:

答案 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;
相关问题