ホームページ > データベース > mysql チュートリアル > Oracle PL/SQL ストアド プロシージャから複数の結果セットを返すにはどうすればよいですか?

Oracle PL/SQL ストアド プロシージャから複数の結果セットを返すにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-28 02:27:10
オリジナル
848 人が閲覧しました

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);
ログイン後にコピー

このクエリは、すべての従業員を 1 つの結果として返します。 table.

次のストアド プロシージャを考えてみましょう:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート