未知の文のタイプを実行時に判別する

提供: InterBase
移動先: 案内検索

動的 SQL での作業 へ戻る


アプリケーションは、isc_dsql_sql_info() を使って、未知の準備済み文の文タイプ(たとえば、実行時にユーザーに入力された文である、など)を、判別することができます。

要求できる情報は次のとおりです:

  • 文のタイプ
  • 文が必要とする入力パラメータの数
  • 文が返す出力値の数
  • データ型、小数点以下の桁数、長さなど、入力パラメータと出力値に関する詳細情報

isc_dsql_sql_info() を使用するには、要求される情報のタイプを記述する項目リスト バッファと、その目的の情報を関数が返す結果バッファのための領域を確保します。 たとえば、文のタイプが不明だが、準備済みである文を判別するには、1 要素の項目リストバッファを確保し、それを ibase.h で定義されるマクロ定数 isc_info_sql_stmt_type で設定します:


char type_item[];
type_item[] = {isc_info_sql_stmt_type};
メモ: 要求される項目群のためのその他の情報項目マクロについては、ibase.h のコメント「SQL information items」以下で確認できます。

結果バッファは、呼び出しによって返されるデータを格納するのに十分な大きさがなければなりません。 このバッファの適正サイズは、要求される情報によって変わります。 十分な領域が確保されていなかった場合、isc_dsql_sql_info() は、予め定義されている値、isc_info_truncated を結果バッファの最後のバイトに入れます。 概して、文のタイプの情報を要求する際には、8 バイトのバッファ サイズで十分でしょう。 バッファ サイズに余裕をみて宣言すると安全です。 文のタイプを識別する要求は、結果バッファ内に次の情報を返します:

1. 1 バイトに isc_info_sql_stmt_type を格納。
2. 数値 <n> を格納する 2 バイト。これは、それに続く <value> を何バイトで構成するかを示します。
3. 1 または 2 バイトで、文のタイプを指定。 次の表は、返される文のタイプの一覧です:
数値

isc_info_sql_stmt_select

1

isc_info_sql_stmt_insert

2

isc_info_sql_stmt_update

3

isc_info_sql_stmt_delete

4

isc_info_sql_stmt_ddl

5

isc_info_sql_stmt_get_segment

6

isc_info_sql_stmt_put_segment

7

isc_info_sql_stmt_exec_procedure

8

isc_info_sql_stmt_start_trans

9

isc_info_sql_stmt_commit

10

isc_info_sql_stmt_rollback

11

isc_info_sql_stmt_select_for_upd

12

4. 最終バイトに、値 isc_info_end (0) を格納

結果バッファに配置されたこの値は、アライメントされていません。 数値はすべて汎用形式で表され、最下位バイトが先頭、最上位バイトが最後になります。 符号付き数値は、最後のバイトに符号が付きます。 数値をそのシステムのネイティブ データ型に変換するのは、それらを解析する前に行ってください。

メモ: タイプ以外の、文についての情報はすべて、isc_dsql_sql_info() 以外の関数を呼び出した方が、簡単に判別することができます。 たとえば、入力 XSQLDA に設定する情報を判別する場合には、-isc_dsql_describe_bind() を呼び出します。 出力 XSQLDA をs絵っていするには、­isc_dsql_prepare() または isc_dsql_describe() を呼び出します。