23 パイプライン・テーブル・ファンクションおよびパラレル・テーブル・ファンクション
Cにおけるパイプライン・テーブル・ファンクションおよびパラレル・テーブル・ファンクションを定義するために実装する必要があるルーチンについて説明します。
関連項目:
パイプライン・テーブル・ファンクションおよびパラレル・テーブル・ファンクションの全般的な説明は、パイプライン・テーブル・ファンクションとパラレル・テーブル・ファンクションの使用を参照してください。
23.1 Cにおけるパイプライン・テーブル・ファンクションとパラレル・テーブル・ファンクションのルーチン
次のCのメソッドは、パラレル・テーブル・ファンクションとパイプライン・テーブル・ファンクションをサポートしています。
表23-1 Cのパイプライン・テーブル・ファンクションおよびパラレル・テーブル・ファンクションの概要
| ファンクション | 説明 | 
|---|---|
| テーブル・ファンクションのスキャン後にクリーン・アップ操作を実行します。 | |
| 戻り型が | |
| テーブル・ファンクションから次の行バッチを戻します。 | |
| コンパイル時にスキャン・コンテキストと他の問合せ情報を準備します。 | |
| テーブル・ファンクションのスキャンを初期化します。 | 
23.1.1 ODCITableClose()
ODCITableCloseは、テーブル・ファンクションをスキャンした後にクリーン・アップ操作を実行します。
                        
構文
MEMBER FUNCTION ODCITableClose( self IN <imptype>) RETURN NUMBER;
| パラメータ | IN/OUT | 説明 | 
|---|---|---|
| self | IN | 前のスキャン・ルーチンの起動により設定されたスキャン・コンテキスト | 
戻り値
正常終了した場合はODCIConst.Success、それ以外の場合はODCIConst.Error。
                        
使用方法
- 
                              Oracleは、最後のフェッチ・コールの後に ODCITableCloseを起動します。スキャン・コンテキストはパラメータとして渡されます。その後、ODCITableCloseはメモリーの解放などの必要なクリーン・アップ操作を実行します。
- 
                              ODCITablePrepareが実装されている場合、このルーチンはテーブル・ファンクションが終了するたびにコールされるのではなく、問合せ実行の終了時に1回のみコールされます。 
23.1.2 ODCITableDescribe()
ODCITableDescribeは、戻り型がANYDATASETであるテーブル・ファンクションの記述情報を戻します。
                        
構文
STATIC FUNCTION ODCITableDescribe( rtype OUT ANYTYPE, <args>) RETURN NUMBER;
| パラメータ | IN/OUT | 説明 | 
|---|---|---|
| rtype | OUT | テーブル・ファンクションから戻された行を記述する | 
| args | IN | ユーザーがテーブル・ファンクションに指定した0個以上の引数の設定。 | 
戻り値
正常終了した場合はODCIConst.Success、それ以外の場合はODCIConst.Error。
                        
使用方法
- 
                              オプションのルーチン ODCITableDescribeが実装された場合、特定の型情報を取得するために問合せのコンパイル時にOracleにより起動されます。
- 
                              このインタフェースを適用できるのは、戻り型が ANYDATASETのテーブル・ファンクションのみです。戻されたコレクション内の要素の書式は、ANYTYPEのインスタンスを戻すことでOracleに伝えられます。ANYTYPEインスタンスでは、特定の問合せで戻される行の実際の構造が指定されます。
- 
                              ANYTYPEは、1行のメタデータ(行を構成するすべての列(フィールド)の名前とデータ型)をモデル化するためのデータ型を提供します。また、メタデータ情報を構成してアクセスするための一連のPL/SQLおよびCインタフェースも提供します。ANYDATASETにはANYTYPEと同様に特定の型の記述が含まれていますが、その型の一連のデータ・インスタンスも含まれています。
- 
                              次の例に、 ANYDATASET型を使用するテーブル・ファンクションでの問合せを示します。SELECT * FROM TABLE(CAST(AnyBooks('http://.../books.xml') AS ANYDATASET));問合せのコンパイル時に、Oracleにより ODCITableDescribeルーチンが起動されます。通常、このルーチンはユーザー引数を使用して戻り行の性質を判別します。この例では、ODCITableDescribeは、指定された位置にあるXML文書のDTDを参照し、戻すのに適切なANYTYPE値を判別します。各ANYTYPEインスタンスは、このフィールド名およびデータ型情報を指定してコンストラクタAPIを呼び出すことで構成されます。
- 
                              定数以外のテーブル・ファンクションの引数は、値がコンパイル時に不明なため、 ODCITableDescribeにNULLとして渡されます。
関連項目:
ANYTYPE、ANYDATAおよびANYDATASETについては、一時型と汎用型を参照してください。
23.1.3 ODCITableFetch()
ODCITableFetchは、テーブル・ファンクションから次の行バッチを戻します。
                        
構文
MEMBER FUNCTION ODCITableFetch( self IN OUT <imptype>, nrows IN NUMBER, rws OUT <coll-type>) RETURN NUMBER;
| パラメータ | IN/OUT | 説明 | 
|---|---|---|
| self | IN OUT | インバウンドは前のスキャン・ルーチンの起動により設定されたスキャン・コンテキストで、アウトバウンドは後のスキャン・ルーチンの起動に渡されるスキャン・コンテキストです。 | 
| nrows | IN | 現在のフェッチ・サイクルでシステムが予期する行数。メソッドは、この値を無視して異なる行数を戻すことができます。この値よりも少ない行数が戻された場合はメソッドが再びコールされ、多い行数が戻された場合は次のサイクルで処理されます。 | 
| rws | OUT | テーブル・ファンクションからの次の行バッチ。これは、テーブル・ファンクションの戻り型と同じコレクション型のインスタンスとして戻されます。 | 
戻り値
正常終了した場合はODCIConst.Success、それ以外の場合はODCIConst.Error。
                        
使用方法
- 
                              ODCITableFetchはOracleにより1回以上起動され、テーブル・ファンクションから戻されたコレクションのすべての行を取り出します。スキャン・コンテキストはパラメータとして渡されます。通常、ODCITableFetchは入力スキャン・コンテキストを使用して、Oracleに戻される次の行セットを計算します。また、それに応じてスキャン・コンテキストを更新できます。
- 
                              fetch()が起動されるたびに戻される行数が増えれば、それだけフェッチのコール回数が減少し、パフォーマンスが向上します。
- 
                              Oracleは、テーブル・ファンクションのコレクション内の行がすべて戻されるまで、 ODCITableFetchを繰り返しコールします。すべての行が戻された後、ODCITableFetchはNULLのコレクションを戻す必要があります。
23.1.4 ODCITablePrepare()
コンパイル時にスキャン・コンテキストと他の問合せ情報を準備します。
構文
STATIC FUNCTION ODCITablePrepare( sctx OUT <imptype>, tf_info SYS.ODCITabFuncInfo, args);
| パラメータ | IN/OUT | 説明 | 
|---|---|---|
| sctx | OUT | このルーチンから戻されるスキャン・コンテキスト。この値は、後続のスキャン・ルーチンにパラメータとして渡されます。スキャン・コンテキストは、 | 
| tf_info | 
 | 投影情報と戻り型の表ディスクリプタ・オブジェクト(TDO)が含まれます。 
 | 
| args | IN | テーブル・ファンクションに渡される引数。このメソッドはコンパイル時に起動されるため、リテラル引数のみが値を持ちます。列および式の引数はNULL値として渡されます。 | 
使用方法
- 
                              このメソッドは、コンパイル時に認識される情報に基づいてスキャン・コンテキストを準備します。このスキャン・コンテキストは、問合せ実行の開始時にコールされると、 ODCITableStartに渡されます。
- 
                              このオプションのメソッドが実装されている場合、 ODCITableCloseは、問合せ実行の終了時にのみコールされます。テーブル・ファンクションが再起動されるたびに、ODCITableStartがコールされ、スキャン・コンテキストが渡されます。これにより、テーブル・ファンクションは次の再開までコンテキストを維持でき、問合せ実行の終了時にのみクリーン・アップ操作を実行できます。
23.1.5 ODCITableStart()
ODCITableStartは、フィールド・ファンクションのスキャンを初期化します。
                        
構文
STATIC FUNCTION ODCITableStart( sctx IN OUT <imptype>, <args>) RETURN NUMBER;
| パラメータ | IN/OUT | 説明 | 
|---|---|---|
| self | IN OUT | このルーチンから戻されるスキャン・コンテキスト。この値は、後続のスキャン・ルーチンにパラメータとして渡されます。スキャン・コンテキストは、 | 
| args | IN | ユーザーがテーブル・ファンクションに指定した0個以上の引数の設定。 | 
| rws | OUT | テーブル・ファンクションからの次の行バッチ。これは、テーブル・ファンクションの戻り型と同じコレクション型のインスタンスとして戻されます。 | 
戻り値
正常終了した場合はODCIConst.Success、それ以外の場合はODCIConst.Error。
                        
使用方法
- 
                              ODCITablePrepareが実装されていない場合、これはテーブル・ファンクションからの行の取得を開始するために起動される最初のルーチンです。通常、このルーチンではスキャンに必要な設定が実行されます。スキャン・コンテキストが(オブジェクト・インスタンスsctxとして)作成され、Oracleに戻されます。ユーザーがSELECT文で指定するテーブル・ファンクションの引数は、このルーチンにパラメータとして渡されます。ODCITablePrepareが実装されている場合は、コンパイル時にスキャン・コンテキストが作成され、そのスキャン・コンテキストがこのルーチンに渡されます。
- 
                              テーブル・ファンクションの REF CURSOR引数は、ODCITableStartメソッドの宣言内でSYS_REFCURSOR型として宣言する必要があります。