仕様: | DB2 CLI 2.1 | ODBC 1.0 |
SQLNativeSql() は、 DB2 CLI がベンダー・エスケープ文節を解釈する方法を表示するために使用します。アプリケーションから渡された元の SQL ストリングにベンダー・エスケープ文節順序列が含まれていた場合、 DB2 CLI はデータ・ソースによって参照される変換後の SQL ストリングを戻します。 (ベンダー・エスケープ文節は適宜変換されるかまたは破棄されるかのどちらかです。)
構文
SQLRETURN SQLNativeSql ( SQLHDBC ConnectionHandle, /* hdbc */ SQLCHAR FAR *InStatementText, /* szSqlStrIn */ SQLINTEGER TextLength1, /* cbSqlStrIn */ SQLCHAR FAR *OutStatementText, /* szSqlStr */ SQLINTEGER BufferLength, /* cbSqlStrMax */ SQLINTEGER FAR *TextLength2Ptr); /* pcbSqlStr */
関数引き数
データ・タイプ | 引き数 | 使用法 | 説明 |
---|---|---|---|
SQLHDBC | ConnectionHandle | 入力 | 接続ハンドル。 |
SQLCHAR * | InStatementText | 入力 | 入力 SQL ストリング。 |
SQLINTEGER | TextLength1 | 入力 | InStatementText の長さ。 |
SQLCHAR * | OutStatementText | 出力 | 変換済み出力ストリングのバッファーを指すポインター。 |
SQLINTEGER | BufferLength | 入力 | OutStatementText が指すバッファーのサイズ。 |
SQLINTEGER * | TextLength2Ptr | 出力 | OutStatementText 内に戻すために使用できる総バイト数 (ヌル終止符を除く)。戻りに使用できるバイト数が BufferLength 以上の場合は、 OutStatementText 内の出力 SQL ストリングが BufferLength - 1 バイトに切り捨てられます。 |
使用法
この関数は、アプリケーションが DB2 CLI によってデータ・ソースに渡される変換済み SQL ストリングを検査または表示したいときに呼び出します。変換 (マッピング) は、入力 SQL ステートメント・ストリングにベンダー・エスケープ文節順序列が含まれているときしか行われません。ベンダー・エスケープ文節順序列の詳細については、 ベンダー・エスケープ文節の使用を参照してください。
DB2 CLI が行えるのは、ベンダー・エスケープ文節の構文エラーを検出することだけです。 DB2 CLI は変換済み SQL ストリングを準備のためにデータ・ソースに渡すことはないため、 DBMS によって検出された構文エラーはこのときには生成されません。 (ステートメントが準備のためにデータ・ソースへ渡されないのは、その準備によりトランザクションが開始される可能性があるからです。)
戻りコード
診断
SQLSTATE | 説明 | 解説 |
---|---|---|
01004 | データが切り捨てられました。 | バッファー OutStatementText の容量が不足しており、 SQL ストリング全体を入れることができなかったため、ストリングを切り捨てました。引き数 TextLength2Ptr に、切り捨てられていない SQL ストリングの全長が含まれています。 (関数は、SQL_SUCCESS_WITH_INFO を戻します。) |
08003 | 接続がクローズされています。 | ConnectionHandle は、オープン・データベース接続を参照していません。 |
37000 | SQL 構文が無効です。 | InStatementText にある入力 SQL ストリングに構文エラーがありました。 |
HY001 | メモリーの割り振り失敗です。 | DB2 CLI は、関数の実行または完了をサポートするのに必要なメモリーを割り振ることができません。 |
HY009 | 引き数値が無効です。 | 引き数 InStatementText はヌル・ポインターです。
引き数 OutStatementText はヌル・ポインターです。 |
HY090 | ストリングまたはバッファー長が無効です。 | 引き数 TextLength1 は 0 より小さく、SQL_NTS と等しくありませんでした。
引き数 BufferLength は、0 より小さい値でした。 |
制約
なし。
(ここで完全サンプル dbnative.c を使用することもできます 。)
/* From the CLI sample DBNATIVE.C */ /* ... */ SQLNativeSql(hdbc, inODBCStmt, SQL_NTS, outDbStmt, 1024, &dbStmtLen); HANDLE_CHECK( SQL_HANDLE_DBC, hdbc, sqlrc, &henv, &hdbc ) ; if ( dbStmtLen == SQL_NULL_DATA ) printf( "Invalid ODBC statement\n" ) ; else { printf( "\n the data source specific format is:\n %s\n", outDbStmt); }
参照