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

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

Patricia Arquette
發布: 2024-12-28 02:27:10
原創
845 人瀏覽過

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

從Oracle PL/SQL 傳回多個結果集

考慮需要建立一個根據輸入動態傳回多個結果集的儲存過程論點。以下是在Oracle PL/SQL 中實現此目的的方法:

建立預存程序

要傳回多個結果集,首先建立一個表示每個結果集中資料的物件類型結果集。例如,要傳回員工資料:

CREATE TYPE EMP_OBJ IS OBJECT (EMPNO NUMBER, ENAME VARCHAR2(10));
登入後複製

接下來,建立一個儲存這些物件集合的表格類型:

CREATE TYPE EMP_TAB IS TABLE OF EMP_OBJ;
登入後複製

現在,建立預存程序。以下是將物件指派給陣列並傳回它的範例:

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 呼叫

建立儲存過程後,您可以在中呼叫它使用TABLE() 建構子的普通SQL:

SELECT * FROM TABLE (ALL_EMPS);
登入後複製

此查詢將傳回所有員工作為單一結果

範例

考慮以下預存程序:

CREATE OR REPLACE PROCEDURE GET_EMPLOYEES (
  DEPT INTEGER,
  OUT RECORDS OUT SYS_REFCURSOR
) IS
...
END;
登入後複製

您可以呼叫此程序並使用遊標存取傳回的記錄:

DECLARE
  EMP_CUR SYS_REFCURSOR;
BEGIN
  GET_EMPLOYEES(10, EMP_CUR);
  LOOP
    FETCH EMP_CUR INTO EMP_OBJ;
    EXIT WHEN EMP_CUR%NOTFOUND;
    ...
  END LOOP;
END;
登入後複製

透過使用物件類型、表格類型和遊標,可以有效地傳回多個結果集來自 Oracle PL/SQL 預存程序。這在處理應用程式中的複雜資料時提供了靈活性和效率。

以上是如何從 Oracle PL/SQL 預存程序傳回多個結果集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板