SQLNativeSql 関数

適合 性
導入されたバージョン: ODBC 1.0 Standards Compliance: ODBC

まとめ
SQLNativeSql は 、ドライバーによって変更された SQL 文字列を返します。 SQLNativeSql は SQL ステートメントを実行しません。

構文

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

引数

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

InStatementText
[入力]変換する SQL テキスト文字列。

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

OutStatementText
[出力]変換された SQL 文字列を返すバッファーへのポインター。

OutStatementText が NULL の場合でも、TextLength2Ptr は OutStatementText が指すバッファーで返される文字の合計数 (文字データの null 終端文字を除く) を返します

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

TextLength2Ptr
[出力]*OutStatementText で返すために使用できる (null 終端を除く) 文字数の合計を返すバッファーへのポインター。 返される文字数が BufferLength 以上の場合、*OutStatementText 内の変換された SQL 文字列は、BufferLength から null 終端文字の長さを引いた値に切り捨てられます。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

SQLNativeSql がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、関連付けられている SQLSTATE 値を取得するには、SQL_HANDLE_DBCの HandleTypeConnectionHandleハンドルを使用して SQLGetDiagRec を呼び出します。 次の表に、SQLNativeSql によって一般的に返される SQLSTATE 値を示し、この関数のコンテキストでそれぞれについて説明します。"(DM)" という表記は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。

SQLSTATE エラー 説明
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
01004 文字列データ、右切り捨て バッファー *OutStatementText が SQL 文字列全体を返すのに十分な大きさではなかったため、SQL 文字列が切り捨てられました。 *TextLength2Ptr では、中断されていない SQL 文字列の長さが返されます。 (関数は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関連付けられているドライバーは、関数をサポートしていません。

説明

スカラー関数 CONVERT を含む次の 入力 SQL 文字列に対して SQLNativeSql が返す可能性のある例を次に示します。 データ ソースの列 empid が 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  

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

[なし] :

参照

ODBC API リファレンス
ODBC ヘッダー ファイル