BULK COLLECT INTO 節 (PL/SQL)

INTO キーワードの前にオプションの BULK COLLECT キーワードがある SELECT INTO ステートメントは、複数行を取り出し 1 つの配列へ格納します。

構文

Read syntax diagramSkip visual syntax diagramBULK COLLECT INTO ,array-variable LIMITexpression

説明

配列変数 への一括収集
1 つ以上の変数を 1 つの配列データ・タイプとみなします。 添字を順に割り当てながら、結果セットの順序でそれぞれの配列の 1 つの要素へ結果の各行を割り当てます。
  • 1 つの array-variable のみを指定した場合。
    • array-variable エレメントのデータ・タイプがレコード・タイプではない場合、SELECT リストには必ず 1 つの列が必要となり、列データ・タイプは配列エレメントのデータ・タイプに割り当て可能でなければなりません。
    • array-variable エレメントのデータ・タイプがレコード・タイプの場合、SELECT リストはレコード・タイプに割り当て可能でなければなりません。
  • 複数の配列変数を指定した場合。
    • array-variable エレメントのデータ・タイプは、レコード・タイプであってはなりません。
    • SELECT リストの各列に array-variable が必要になります。
    • SELECT リストの各列のデータ・タイプは、対応する array-variable の配列エレメントのデータ・タイプに割り当て可能でなければなりません。
array-variable のデータ・タイプが通常配列の場合、最大カーディナリティーは照会によって戻される行数以上である必要があります。
LIMIT
フェッチする行数の上限を指定します。 式は、数値リテラル、変数、または複合式にすることができますが、select ステートメントで得る任意の列に依存するようにはできません。

  • どの BULK COLLECT INTO 節のバリエーションも、FETCH ステートメントおよび EXECUTE IMMEDIATE ステートメントがサポートされます。

以下の例は、プロシージャーから行の配列を戻すために BULK COLLECT INTO 節を使用するプロシージャーを示しています。 プロシージャーおよび配列のタイプは、パッケージで定義されています。
CREATE OR REPLACE PACAKGE bci_sample
IS
 TYPE emps_array IS VARRAY (30) OF VARCHAR2(6);

 PROCEDURE get_dept_empno (
  dno       IN   emp.deptno%TYPE,
  emps_dno  OUT  emps_array
  );
END bci_sample;

CREATE OR REPLACE PACKAGE BODY bci_sample
IS
 PROCEDURE get_dept_empno (
  dno       IN   emp.deptno%TYPE,
  emps_dno  OUT  emps_array
  )
 IS
  BEGIN
   SELECT empno BULK COLLECT INTO emps_dno
    FROM emp
    WHERE deptno=dno;
  END get_dept_empno;
END bci_sample;