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の HandleType と ConnectionHandle のハンドルを使用して 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
詳細については、「直接実行」および「準備された実行」を参照してください。
関連する関数
[なし] :