13.49 PIPELINED句
テーブル・ファンクションまたは多相テーブル・ファンクションの結果を繰り返し戻すようデータベースに指示します。
テーブル・ファンクションでのみ使用し、このファンクションがパイプラインであることを指定します。パイプライン・テーブル・ファンクションは、行を処理した直後に起動元に行を戻し、行の処理を継続します。起動元に(制御を戻さずに)行を戻すために、このファンクションではPIPE ROW文を使用します。
テーブル・ファンクションはコレクション型を返します。
多相テーブル・ファンクションは、戻り型が引数によって決定されるテーブル・ファンクションです。
問合せのFROM
句内で、ファンクション名の前でTABLE
キーワードを使用して、両方の種類のテーブル・ファンクションを問い合せます。たとえば:
SELECT * FROM TABLE(function_name(...))
テーブル・ファンクションの引数リストまたは空のlist ()がある場合、TABLE
演算子は省略できます。たとえば:
SELECT * FROM function_name()
これによって、ファンクションで行が生成されると、データベースによってその行が戻されます。
PIPELINEDオプションは、次のSQL文に指定できます。
構文
pipelined_clause ::=
セマンティクス
pipelined_clause
pipelined_clauseはファンクション内で1回のみ使用できます。
PIPELINED
パイプライン・ファンクションを作成するには、ファンクション定義にpipelinedを含めます。パイプライン・ファンクションを定義する前に宣言する場合、ファンクションの宣言でPIPELINED
オプションを指定する必要があります。
{ IS | USING }
-
キーワード
PIPELINED
を単独で指定する場合(PIPELINED
IS
...)は、PL/SQLファンクション本体でPIPE
キーワードを使用する必要があります。このキーワードは、コレクション全体を単一の値として戻すのではなく、コレクションの個々の要素をファンクションから戻すようにデータベースに指示します。 -
開始、フェッチおよび終了の操作が含まれるインタフェースを事前定義する場合は、
PIPELINED
USING
implementation_type
句を指定できます。実装タイプは、ODCITable
インタフェースを実装する必要があり、テーブル・ファンクションの作成時に存在している必要があります。この句は、C++やJavaなどの外部言語で実装されるテーブル・ファンクションに便利です。ファンクションの戻り型が
ANYDATASET
である場合は、ファンクションの実装タイプの一部としてdescribeメソッド(ODCITableDescribe
)も定義する必要があります。
[schema.] implementation_type
この実装タイプは、ODCIAggregate
サブプログラムの実装が含まれているADTにする必要があります。schema
を指定しない場合、実装タイプは自分のスキーマ内に存在するとみなされます。
PIPELINEDの制限
ネストしたファンクションにPIPELINED
を指定することはできません。
ノート:
パイプライン・テーブル・ファンクションは、データベース・リンクを介して実行することはできません。パイプライン・テーブル・ファンクションの戻り型がユーザー定義のSQL型であり、単一データベース内でのみ使用可能であるためです(『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照)。パイプライン・テーブル・ファンクションの戻り型がPL/SQL型のように見える場合でも、そのPL/SQL型は実際にはデータベースによって対応するユーザー定義のSQL型に変換されます。
PIPELINED [ ROW | TABLE ] POLYMORPHIC [ USING [schema.] implementation_package ]
多相テーブル・ファンクションのエラボレータは、スタンドアロン・ファンクションの宣言またはパッケージ・ファンクションの宣言で指定できます。
PIPELINED
多相テーブル・ファンクションを定義するときに必要です。
ROW
TABLE
型の単一の入力引数が、任意の単一行を使用して新しい列を判別する場合はROW
を指定します。
TABLE
TABLE
型の単一の入力引数が、現在の行を使用して新しい列を判別し、表全体または表の論理パーティションで動作する場合はTABLE
を指定します。
POLYMORPHIC
POLYMORPHIC
の制限
POLYMORPHIC
テーブル・ファンクションでは使用できません。
-
PARALLEL_ENABLE句
-
RESULT_CACHE句
-
DETERMINISTICオプション
-
AUTHIDプロパティ(実行者権限および定義者権限句)
[USING [schema.] implementation_package]
多相テーブル・ファンクション(PTF)実装パッケージを参照します。この仕様にはDESCRIBE
メソッドを含める必要があります。OPEN
、FETCH_ROWS
およびCLOSE
メソッドの仕様は任意です。実装パッケージの仕様がすでに存在している必要があります(PTFとその実装が同じパッケージに作成される場合を除く)。
多相表関数とその実装メソッドが同じパッケージで定義されている場合、USING
句はオプションです。
例
-
例: PIPE ROW文の例
-
DBMS_TFパッケージ・ユーティリティを使用したその他の例は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
関連トピック
この章:
他の章:
-
PTFの詳細は、多相テーブル・ファンクションの概要を参照してください。
その他のドキュメント:
-
多相テーブル・ファンクション(PTF)実装のユーティリティが含まれているDBMS_TFパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
パイプライン・テーブル・ファンクションを使用する方法の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。