13.47 PIPELINED句

テーブル・ファンクションの結果を反復的に戻すようにデータベースに指示します。

テーブル・ファンクションでのみ使用し、このファンクションがパイプラインであることを指定します。パイプライン・テーブル・ファンクションは、行を処理した直後に起動元に行を戻し、行の処理を継続します。起動元に(制御を戻さずに)行を戻すために、このファンクションではPIPE ROW文を使用します。

テーブル・ファンクションは、コレクション型(ネストした表またはVARRAY)を戻します。問合せのFROM句のファンクション名の前にTABLEキーワードを使用して、テーブル・ファンクションを問い合せます。次に例を示します。

SELECT * FROM TABLE(function_name(...))

これによって、ファンクションで行が生成されると、データベースによってその行が戻されます。

ここでのトピック

構文

pipelined_clause ::=

セマンティクス

pipelined_clause

PIPELINED { IS | USING }

PIPELINEDはファンクション内で1回のみ使用できます。

  • キーワードPIPELINEDを単独で指定する場合(PIPELINED IS ...)は、PL/SQLファンクション本体でPIPEキーワードを使用する必要があります。このキーワードは、コレクション全体を単一の値として戻すのではなく、コレクションの個々の要素をファンクションから戻すようにデータベースに指示します。

  • 開始、フェッチおよび終了の操作が含まれるインタフェースを事前定義する場合は、PIPELINED USING implementation_type句を指定できます。実装タイプは、ODCITableインタフェースを実装する必要があり、テーブル・ファンクションの作成時に存在している必要があります。この句は、C++やJavaなどの外部言語で実装されるテーブル・ファンクションに便利です。

    ファンクションの戻り型がANYDATASETである場合は、ファンクションの実装タイプの一部としてdescribeメソッド(ODCITableDescribe)も定義する必要があります。

PIPELINEDの制限

ネストしたファンクションにPIPELINEDを指定することはできません。

注意:

パイプライン・テーブル・ファンクションは、データベース・リンクを介して実行することはできません。パイプライン・テーブル・ファンクションの戻り型がユーザー定義のSQL型であり、単一データベース内でのみ使用可能であるためです(『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照)。パイプライン・テーブル・ファンクションの戻り型がPL/SQL型のように見える場合でも、そのPL/SQL型は実際にはデータベースによって対応するユーザー定義のSQL型に変換されます。