パイプライン関数はデータ変換に使用でき、テーブル関数間でのデータ受け渡しもサポートしています。
機能の適用範囲
この内容は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を参照してください。