DBFIRQは、DBCHCLのInitiate Request関数であり、データベースに処理すべきリクエストを送信します。
どのように機能するか
- セッションが活動状態であれば、活動状態のリクエストが完了するまで待ちます。
- 活動状態のリクエストがIRQであれば、そのリクエストの最終状態を内部的に保存します。
- 前のリクエストがCONで、その処理が成功していない場合は、戻りエラー「unable to initiate because session is not logged on(セッションにログオンしていないため、開始できません)」が表示される。
- リクエスト バッファの大きさが十分なことを確かめる。
- 次のように、リクエスト バッファ内にリクエストを作成します。
- 応答は、Response Modeフィールドの設定値に基づいてレコード モード、フィールド モード、標識モード、またはマルチパート モードのいずれかでなければなりません。
- 入力データは、Use Presence Bitsフィールドの設定値に基づいてレコード モードまたは標識モードのいずれかであるか、または、Using Data Lengthフィールドの設定値に基づいていずれのモードでもないか、のどちらかでなければなりません。
- Keep Responseフィールドの設定値に基づいて、SETPOSITION Positionパーセル、RespまたはKeepRespパーセルを順に追加します。 keep_respが'P'に設定されている場合、SETPOSITIONパーセルはKeepRespパーセルと共に追加されます。
- セッションがTeradata SQLでなかった(バイパス フラグがYに設定された)場合には、SQLバッファのポインタを無視し、パーセルを追加せずにリクエスト バッファを生成した場合のように、using dataバッファを使用します。
- リクエストをMTDPに送ります。
- 処理に成功しなければ、クリーンアップして、アプリケーションに戻ります。
- Open Requestなどを設定して、呼び出し側に戻ります。
リクエストの開始
- DBFIRQ関数のDBCHCLを呼び出します。
- その戻りコードがゼロであることを確認します。
ゼロの戻りコードは、Teradata SQLリクエストが成功したことを意味しません。Teradata SQLリクエストがデータベースに送られたこと、つまり、初期状態が正常であることを意味します。クライアントでリクエストの処理に成功した場合には、データベースはそのリクエストを処理し、Teradata SQL応答の最初の部分(1バッファ分)をクライアントに送ります。
成功するリクエスト/応答操作
- DBFIRQ関数のDBCHCLを呼び出します。
- その戻りコードがゼロであることを確認します。
- DBFERQ関数のDBCHCLを呼び出します。
- その戻りコードがゼロであることを確認します。
最初にDBFCON関数のDBCHCLを呼び出さずに、DBFIRQ関数のDBCHCLを呼び出した場合には、DBCHCLは戻りコード「first do a connect(最初に接続してください)」(NO SESSION;304)を返します。
Teradata SQLリクエストにUSING修飾子が含まれる場合は、アプリケーション プログラムでUsing Data PointerとUsing Data Lengthを提供する必要があります。CLIは、Teradata SQLリクエストを解析しないので、USING修飾子およびusing dataを適切に与えることができません。同様に、Teradata SQLリクエストにUSING修飾子が含まれない場合は、アプリケーション プログラムでUsing Data Lengthをゼロに設定する必要があります。
DBFIRQ関数のDBCHCLの呼び出しによってゼロ以外の戻りコードが生じた場合には、Initiate Requestは処理に失敗しており、その戻りコードの値が理由を示します。 存在していないリクエスト用のCLI内部構造体は、DBFERQ関数のDBCHCLを呼び出すことによって割り当てを解除することができます(解除しなければなりません)。 DBFIRQ関数のOutput Request Idの値を、DBFERQ関数のInput Request Idとして与えます。
インターフェース
関数: | DBFIRQ - Initiate ReQuest |
目的: | リクエストの実行 |
パラメータ: |