長形式データを扱う場合、ステートメントを実行する時、またはデータをデータベースから取り出す時に、アプリケーションがデータ全体を記憶域にロードするのは合理的ではないことがあります。そこでアプリケーションがデータを小さく分けて扱えるような方法が備えられています。長データを分けて送信する手法は、 実行時パラメーター値の指定 と呼ばれます。これは、整数などの固定サイズの非文字データ・タイプの値を指定する場合にも使用できるからです。
また、アプリケーションは SQLGetSubString() 関数を使用して、ラージ・オブジェクト値の一部分を検索することができます。詳細については、ラージ・オブジェクトの使用の図 16 を参照してください。
SQLExecute() または SQLExecDirect() を呼び出す前に値がメモリーに保管されるのではなく、実行時に値がプロンプト指示されるバインド済みパラメーターのことを実行時データ・パラメーターと呼びます。 SQLBindParameter() 呼び出しでそのようなパラメーターを指定するには、アプリケーションは次のようにします。
アプリケーションが SQLExecDirect() または SQLExecute() を呼び出したときに実行時パラメーターがあれば、呼び出しは SQL_NEED_DATA とともに返され、これらのパラメーターにアプリケーションが値を入れるよう入力を要求します。アプリケーションは次のように応答します。
すべての実行時データ・パラメーターに値が割り当てられると、 SQLParamData() は SQL ステートメントの実行を完了し、元々 SQLExecDirect() または SQLExecute() が作成するはずであった戻り値および診断を作成します。 図 9 の右側にこの流れを図示してあります。
実行時データ・フローが進んでいる間は、アプリケーションは次の DB2 CLI 関数だけ呼び出せます。
実行時パラメーターの手法を使用してラージ・オブジェクト・データを入力する際に、クライアントで一時ファイルを作成して使用することが必要となる場合があります。長形式データを入力する他の方式については、ラージ・オブジェクトの使用を参照してください。
一般にアプリケーションは、結果セットの列に関する知識 (SQLDescribeCol() によって得た知識か、または以前の知識) に基づいて、列の値が使う可能性のある最大メモリーを割り振るよう選択し、その列を SQLBindCol() によってバインドします。しかし、文字および 2 進データの場合、列の長さが不定であることがあります。列値の長さが、アプリケーションが割り振る (または割り振れる) バッファーの長さを超えている場合に、 SQLGetData() の機能を使用すると、アプリケーションが繰り返して呼び出しを行い、 1 つの列の値を管理しやすい大きさに分けて連続して得ることができます。
基本的には、図 9 の左側に示したように、 SQLGetData() を呼び出すと SQL_SUCCESS_WITH_INFO (および SQLSTATE 01004) が返され、この列に関するデータがさらに存在することを示します。 SQLGetData() が繰り返して呼び出され、 SQL_SUCCESS が返されるまでデータの残りの部分を獲得します。 SQL_SUCCESS は、この列に関するデータ全体が取り出されたことを知らせるものです。
また、関数 SQLGetSubString() を使用して、ラージ・オブジェクト値の特定部分を検索することができます。詳細については、SQLGetSubString - ストリング値の部分を取り出すを参照してください。長形式データを取り出す他の方式については、ラージ・オブジェクトの使用を参照してください。
![]() |
イメージ blob の分割入力の例については、 CLI サンプル dtlob.c の picin2.c を参照してください。
イメージ blob の分割取り出しの例については、 CLI サンプル tbread.c の showpic2.c を参照してください。