ホームページ >データベース >mysql チュートリアル >Oracle PL/SQL ストアド プロシージャから複数の結果セットを返す方法

Oracle PL/SQL ストアド プロシージャから複数の結果セットを返す方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-29 04:40:09163ブラウズ

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

Oracle PL/SQL ストアド プロシージャを使用して複数の結果セットを返す

質問:

ストアド プロシージャを作成するにはどうすればよいですか?渡された引数に基づいてさまざまなデータセットを取得し、その後プレーンから呼び出します。 SQL?

答え:

Oracle PL/SQL ストアド プロシージャから複数の結果セットを返すには、次のアプローチを使用できます:

  1. オブジェクトとテーブルのタイプの作成:

    まず、オブジェクトとテーブルのタイプを定義します結果セットのデータ構造を表します。この例では、empno (number) と ename (varchar2) という 2 つの属性を持つ emp_obj オブジェクト タイプを作成します。次に、emp_obj オブジェクトのコレクションとして emp_tab テーブル タイプを作成します。

  2. ストアド プロシージャを構築します。

    関数を定義します (all_empsこの場合)、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。