首頁 > 資料庫 > mysql教程 > 如何從 Oracle PL/SQL 預存程序傳回多個結果集?

如何從 Oracle PL/SQL 預存程序傳回多個結果集?

Mary-Kate Olsen
發布: 2024-12-29 04:40:09
原創
167 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板