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型に変換されます。
関連トピック
この章:
他の章:
その他のドキュメント:
-
パイプライン・テーブル・ファンクションを使用する方法の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。