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