首页 > 数据库 > mysql教程 > 如何从 Oracle PL/SQL 存储过程返回多个结果集?

如何从 Oracle PL/SQL 存储过程返回多个结果集?

Mary-Kate Olsen
发布: 2024-12-29 04:40:09
原创
177 人浏览过

How to Return Multiple Result Sets from an Oracle PL/SQL Stored Procedure?

使用 Oracle PL/SQL 存储过程返回多个结果集

问题:

我们如何创建存储过程根据传递的参数检索各种数据集,然后从普通调用它SQL?

答案:

要从 Oracle PL/SQL 存储过程返回多个结果集,我们可以采用以下方法:

  1. 创建对象和表类型:

    首先,我们定义对象和表类型来表示结果集的数据结构。在此示例中,我们创建一个具有两个属性的 emp_obj 对象类型:empno(数字)和 ename(varchar2)。然后我们创建一个 emp_tab 表类型作为 emp_obj 对象的集合。

  2. 构建存储过程:

    我们定义一个函数(all_emps in在本例中)返回一个 emp_tab 集合。在函数内部:

    • 初始化一个空的 emp_tab 变量。
    • 执行循环以迭代所需的行(在本示例中,从 emp 表中检索 empno 和 ename)。
    • 扩展 emp_tab 集合并将每行的值分配给 emp_obj
    • 返回填充的 emp_tab 集合。
  3. 从 SQL 调用存储过程:

    调用SQL 中的 all_emps 函数,我们使用表运算符。这允许我们将返回的集合作为常规表进行查询。

示例:

SQL> create type emp_obj is object (empno number, ename varchar2(10));

SQL> create type emp_tab is table of emp_obj;

SQL> create or replace function all_emps return emp_tab
is
    l_emp_tab emp_tab := emp_tab();
    n integer := 0;
begin
    for r in (select empno, ename from emp)
    loop
        l_emp_tab.extend;
        n := n + 1;
        l_emp_tab(n) := emp_obj(r.empno, r.ename);
    end loop;
    return l_emp_tab;
end;

SQL> select * from table (all_emps);
登录后复制

结果:

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7788 SCOTT
      7839 KING
      7844 TURNER
      7902 FORD
      7934 MILLER
登录后复制

以上是如何从 Oracle PL/SQL 存储过程返回多个结果集?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板