SQLNativeSql 関数

適合 性
導入版:ODBC 1.0 規格準拠:ODBC

Summary
SQLNativeSQL は、ドライバーによって修正されたSQL文字列を返します。 SQLNativeSQL はSQL文を実行しません。

構文

  
SQLRETURN SQLNativeSql(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      InStatementText,  
     SQLINTEGER     TextLength1,  
     SQLCHAR *      OutStatementText,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   TextLength2Ptr);  

引数

ConnectionHandle
[入力] 接続ハンドル。

声明本文
[入力]翻訳されるSQLテキスト文字列。

テキスト長1
[入力]*InStatementText テキスト文字列の文字数の長さ。

アウトステートメント本文
[出力]翻訳されたSQL文字列を返すためのバッファへのポインタ。

OutStatementTextがNULLの場合、TextLength2PtrOutStatementTextが指すバッファ内で返せる文字数(文字データのnull終端文字を除く)を返します。

BufferLength
[入力]*OutStatementText バッファ内の文字数。 過去のバージョンでは、 *InStatementText で返される値がUnicode文字列( SQLNativeSqlWを呼び出した際)であっても、この文字数は偶数でなければならないと誤って示唆されていました。 そのような制限はありません。 最適な相互運用性のために、ドライバーライターはこの関数に渡される文字数を想定し、アプリケーションライターは常に偶数カウントを使用することが推奨されます。

テキスト長2Ptr
[出力]*OutStatementTextで返せる文字数(null終端を除く)を返すためのバッファへのポインタ。 返せる文字数が BufferLength以上の場合、*OutStatementText の翻訳されたSQL文字列は BufferLength からnull終端文字の長さを引いたものに短縮されます。

返品

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

Diagnostics

SQLNativeSQLがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、HandleTypeをSQL_HANDLE_DBC、HandleConnectionHandleとしてSQLGetDiagRecを呼び出すことで関連するSQLSTATE値を取得できます。 以下の表は 、SQLNativeSQL が一般的に返すSQLSTATEの値を一覧にし、この関数の文脈でそれぞれを説明します。「(DM)」という表記は、ドライバーマネージャーが返すSQLstateの記述の前に記載されます。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。

SQLSTATE エラー Description
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
01004 文字列データ、右切り捨て バッファの*OutStatementText はSQL文字列全体を返すには大きさが足りなかったため、SQL文字列は切り詰められました。 切り詰められていないSQL文字列の長さは*TextLength2Ptrで返されます。 (関数はSQL_SUCCESS_WITH_INFOを返します。
08003 接続が開かない ConnectionHandleは接続状態ではありませんでした。
08S01 通信リンクエラー ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。
22007 datetime 形式が無効です * InStatementText には無効な日付、時刻、タイムスタンプのエスケープ条が含まれていました。
24000 カーソル状態が無効 文で言及されたカーソルは、結果集合の開始前か終了後に位置付けられました。 このエラーは、ネイティブのDBMSカーソル実装を持つドライバーによっては返されない場合があります。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY009 null ポインターの使用が無効です (DM) *InStatementText はnullポインタでした。
HY010 関数シーケンス エラー (DM) ConnectionHandle に対して非同期実行の関数が呼び出され、この関数が呼び出された時点でも実行中でした。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY090 文字列またはバッファーの長さが無効です (DM) 引数TextLength1 は0未満でしたが、SQL_NTSと等しくはありませんでした。
(DM) BufferLength の引数が0未満で、 引数 OutStatementText はnull ポインタではありませんでした。
HY109 カーソル位置が無効です 現在のカーソルの行は削除されたか、取得されていなかった。 このエラーは、ネイティブのDBMSカーソル実装を持つドライバーによっては返されない場合があります。
HY117 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。
HYT01 接続がタイムアウトしました データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) ConnectionHandle に関連付けられたドライバはこの関数をサポートしていません。

Comments

以下は、 SQLNativeSQL がスカラー関数CONVERTを含む入力SQL文字列に対して返す可能性のある例です。 データソースにおけるエピッド列の型がINTEGERであると仮定します:

SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee  

Microsoft SQL Serverのドライバーは、以下の翻訳されたSQL文字列を返すことがあります:

SELECT convert (smallint, empid) FROM employee  

ORACLE Serverのドライバーは、以下の翻訳済みSQL文字列を返すことがあります。

SELECT to_number (empid) FROM employee  

Ingresのドライバーは、以下の変換されたSQL文字列を返すことがあります。

SELECT int2 (empid) FROM employee  

詳細は「 直接実行 」および 「準備実行」を参照してください。

None.