DBCAREAで、アプリケーション プログラムは以下の処理を行ないます。
- DBCAREAがこのセッション用に最後に使用されたあとで別のセッション用に使用されていた場合には、このセッションのセッションidを与えます。
- DBCAREA内のリクエスト バッファおよび応答バッファの長さが最後に設定されたあとで別の長さに設定されて使用されていた場合には、それぞれのバッファの長さに最大値を与えます。
- Teradata SQLリクエストの長さおよびポインタを供給します。USING修飾子を伴うリクエストとデータの組み合わせは、32Kバッファの場合は32500バイト、64Kバッファの場合は65000バイト、1Mバッファの場合は1048500バイトを超えることはできません。
- USING修飾子を用いたTeradata SQL文がTeradata SQLリクエストに入っていた場合には、USING修飾子を指すポインタとUSING修飾子のデータを与えます。
- 処理オプションの設定を変更することができます。
- 関数コードをDBCFIRQに設定します。
- DBCHCLを呼び出します。
DBCHCL
リクエストがDBCAREAのセッション識別子フィールドによって指定されたセッションで現在活動状態であれば、以下の処理が行なわれます。
- MTDP制御ブロックの関数フィールドが、MTDPRETに設定されます。
- MTDPCBのセッション フィールドおよびリクエスト識別子フィールドが、活動状態のセッションおよびリクエスト識別子に設定されます。
- waitdataオプションが、DBCAREAのwaitdataオプションのフラグの値に従って設定されます。
- MTDPが、活動状態のリクエストが完了するのを待つために呼び出されます。
MTDP
MTDPは、指定されたリクエストが完了したかどうかを調べて、waitdataオプションのフラグが真であれば、その前のリクエストに対する応答メッセージが到着するかエラーが発生するまで待ったあとで、制御をDBCHCLに返します。
DBCHCL
活動状態のリクエストが完了したならば、そのリクエストのRCBの状態フラグが処理待ちとしてポストされ、そのリクエストがfetch関数で使用できるようになります。
DBCAREA内の情報を使用して、DBCHCLは以下の処理を行ないます。
- 新しいリクエスト用にRCBを作成します。
- 関連付けられたSCBのリクエスト リストの先頭に、作成したRCBを挿入します。
- setオプションのフラグがYに設定されていれば、関連付けられたセッションのSCBまたはDBCAREAのどちらかの値をそのRCBのオプション フィールドに収容します。DBCAREA内に指定された長さ、または何も指定されていなければCLI2SPB内に指定されたデフォルトとしての長さに基づいて、リクエスト バッファおよび応答バッファを割り当てます。
- リクエスト バッファを、以下に示すパーセルを使用してロードします。
- レコード モード オプションのフラグの値に応じて決まる、Teradata SQLリクエストが入っているReq、FMReq、またはIndicReqパーセル
- USING修飾子を用いたTeradata SQL文がTeradata SQLリクエストに含まれていた場合には、DataまたはIndicDataパーセル
- 応答バッファの長さが入っているRespまたはKeepRespパーセル
MTDP制御ブロックで、DBCHCLは以下の処理を行ないます。
- リクエスト バッファの長さとリクエスト バッファを指すポインタを与えます。
- 応答バッファの長さと応答バッファを指すポインタを与えます。
- selfrecovオプションを変更します(必要な場合)。
- MTDPSTAを、MTDP制御ブロックの関数コードに設定します。
- リクエストidを割り当てます。
- MTDPを呼び出します。
MTDP
MTDPは、Start Requestメッセージをデータベースに送って、制御をDBCHCLに返します。
DBCHCL
MTDPから返された値に基づいて、以下の処理が行なわれます。
- エラー メッセージまたは成功メッセージが生成されて、DBCAREAのメッセージ フィールドの中でアプリケーションに返されます。
- 論理リクエスト識別子が、DBCAREAのリクエスト副構造体の中に返されます。
- DBCHCLは、制御をアプリケーションに返します。
アプリケーション
DBCAREAの戻りコードが正常でなければ、上に述べたように、アプリケーションで、DBCAREAを適切に変更してDBCHCLに再び送ります。 戻りコードが正常な場合、DBCAREAを別のリクエストで同時に使用する予定があれば、アプリケーションでリクエストidを保存します。 これで、インターフェースがTeradata SQL応答を消費する準備が整いました。