パイプライン関数はデータ変換に使用でき、テーブル関数間のデータ転送もサポートしています。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
パイプライン関数によるデータ変換
カーソル変数パラメータを持つパイプライン関数は、通常の関数と同様に任意のパラメータを受け取ることができます。パイプライン関数はカーソル変数を使用して入力行を取得し、PIPE ROW ステートメントを使用して変換後の1行または複数の行をパイプライン経由で呼び出し元に転送します。FETCH および PIPE ROW ステートメントが LOOP ステートメント内にある場合、その関数は複数の入力行を変換できます。
パイプライン関数間のデータ転送
パイプライン関数のカーソル変数パラメータの実際の値は、カーソル変数または CURSOR 式にすることができ、後者の方が効率的です。SQL SELECT ステートメントが CURSOR 式を関数に渡すと、参照されるカーソルは関数の実行開始時に開き、関数の終了時に閉じられます。
パイプライン関数結果の取得
パイプライン関数の結果を取得するには、命名済みのカーソルをパイプライン関数を呼び出すクエリに関連付けることができます。このようなカーソルには特別な取得セマンティクスはなく、カーソル変数にも特別な代入セマンティクスはありません。
パイプライン関数が集計関数として機能する場合、それは一連の入力行を受け取り、単一の結果を返します。SELECT ステートメントでは関数の結果を選択できます。
パイプライン関数結果に対するDML操作
パイプライン関数が返す「テーブル」は、DELETE、INSERT、UPDATE、または MERGE ステートメントのターゲットテーブルにすることはできません。ただし、このようなテーブルのビューを作成し、ビュー上に INSTEAD OF トリガーを作成することはできます。INSTEAD OF トリガーの詳細については、CREATE TRIGGERを参照してください。