適合 性
導入版:ODBC 1.0 規格準拠:ODBC
まとめ
SQLProcedures は特定のデータソースに保存されたプロシージャ名のリストを返します。
プロシージャ とは、 実行可能なオブジェクトや、入力および出力パラメータを使って呼び出せる名前付きエンティティを表す一般的な用語です。 手続きの詳細については、「 手順」をご覧ください。
Syntax
SQLRETURN SQLProcedures(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * ProcName,
SQLSMALLINT NameLength3);
引数
StatementHandle
[入力]ステートメント ハンドル。
CatalogName
[入力]手術カタログ。 ドライバが一部のテーブルにはカタログをサポートしているが、他のテーブルではサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、空文字列(「」)はカタログを持たないテーブルを示します。
CatalogNameは 文字列検索パターンを含めません。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 CatalogName は識別子として扱われ、その大文字は重要ではありません。 もしSQL_FALSEであれば、 カタログ名 は通常の引数となります。文字通りに扱われており、そのケースは重要です。 詳細については、「カタログ関数の引数」を参照してください。
NameLength1
[入力]*カタログ名の文字数。
SchemaName
[入力]プロシージャスキーマ名の文字列検索パターン。 ドライバがあるプロシージャにはスキーマがサポートされているが、他のプロシージャには対応しない場合(例えば異なるDBMSからデータを取得する場合など)、空文字列("")はスキーマを持たないプロシージャを示します。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 SchemaName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 SchemaName はパターンの値の引数となります。文字通りに扱われており、そのケースは重要です。
NameLength2
[入力]*SchemaNameの文字数。
ProcName
[入力]プロシージャ名の文字列検索パターン。
SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 ProcName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 ProcName はパターン値の引数です。文字通りに扱われており、そのケースは重要です。
NameLength3
[入力]*ProcNameの文字数。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
Diagnostics
SQLProceduresがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返すと、SQLGetDiagRecを呼び出してHandleTypeをSQL_HANDLE_STMT、HandleをStatementHandleで呼び出すことで関連するSQLSTATE値を取得できます。 以下の表は 、SQLProcedures によって一般的に返されるSQLSTATEの値を一覧にし、それぞれをこの関数の文脈で説明しています。「(DM)」という表記は、ドライバーマネージャーが返すSQLstateの記述の前に記載されます。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。
| SQLSTATE | エラー | Description |
|---|---|---|
| 01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
| 08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
| 24000 | カーソル状態が無効 |
StatementHandle上のカーソルが開かれ、SQLFetchまたはSQLFetchScrollが呼び出されていました。 このエラーは、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返していない場合にドライバー マネージャーによって返され、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返した場合にドライバーによって返されます。 StatementHandleにはカーソルが開かれていましたが、SQLFetchやSQLFetchScrollは呼び出されていませんでした。 |
| 40001 | シリアル化エラー | 別のトランザクションでリソースのデッドロックが発生したため、トランザクションがロールバックされました。 |
| 40003 | ステートメントの入力候補が不明です | この関数の実行中に関連付けられた接続が失敗し、トランザクションの状態を特定できません。 |
| HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。 |
| HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
| HY008 | 操作が取り消されました |
StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle が StatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーション内の別のスレッドから StatementHandle で呼び出されました。 |
| HY009 | null ポインターの使用が無効です | SQL_ATTR_METADATA_ID文属性はSQL_TRUEに設定され、 CatalogName の引数はnullポインタであり、SQL_CATALOG_NAME InfoType はカタログ名がサポートされていることを返します。 (DM) SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定され、 SchemaName または ProcName の引数はnullポインタでした。 |
| HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、この関数が呼び出された時点でまだ実行中でした。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResultsStatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
| HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
| HY090 | 文字列またはバッファーの長さが無効です | (DM) 名前の長さの引数のうちの一つの値は0未満で、SQL_NTSと等しくなかった。 名前の長さの引数のいずれかの値が、対応する名前の最大長の値を超えました。 |
| HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
| HYC00 | 省略可能な機能が実装されていません | プロシージャカタログが指定されており、ドライバーやデータソースはカタログをサポートしていません。 プロシージャスキーマが指定されており、ドライバやデータソースはスキーマをサポートしていません。 プロシージャスキーマまたはプロシージャ名には文字列検索パターンが指定されており、データソースはこれらの引数の一つまたは複数に対して検索パターンをサポートしていません。 SQL_ATTR_CONCURRENCY属性とSQL_ATTR_CURSOR_TYPE ステートメント属性の現在の設定の組み合わせは、ドライバーまたはデータ ソースではサポートされていませんでした。 SQL_ATTR_USE_BOOKMARKS ステートメント属性はSQL_UB_VARIABLEに設定され、SQL_ATTR_CURSOR_TYPE ステートメント属性は、ドライバーがブックマークをサポートしていないカーソルの種類に設定されました。 |
| HYT00 | タイムアウトの期限が切れました | データ ソースが要求された結果セットを返す前に、クエリのタイムアウト期間の有効期限が切れています。 タイムアウト期間は、SQL_ATTR_QUERY_TIMEOUT SQLSetStmtAttr によって設定されます。 |
| HYT01 | 接続がタイムアウトしました | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
| IM001 | ドライバーは、この関数をサポートしていません | (DM) StatementHandle に関連付けられたドライバーはこの機能をサポートしていません。 |
| IM017 | 非同期通知モードでポーリングが無効になっている | 通知モデルが使用されるたびに、ポーリングは無効になります。 |
| IM018 | SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 | ハンドルに対する前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、 SQLCompleteAsync をハンドルで呼び出す必要があります。 |
Comments
SQLProcedures は、要求範囲内のすべての手続きを一覧化します。 ユーザーはこれらの手順を実行する権限を持つ場合もあれば、持たない場合もあります。 アクセシビリティを確認するために、アプリケーションは SQLGetInfo を呼び出してSQL_ACCESSIBLE_PROCEDURES情報値を確認できます。 そうでなければ、ユーザーが実行できないプロシージャを選択した場合に対応できる必要があります。 この情報がどのように利用されるかについては 、「手続き」を参照してください。
Note
ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。
SQLProcedures は、PROCEDURE_CAT、PROCEDURE_SCHEMA、PROCEDURE_NAME順に並べた標準結果セットとして結果を返します。
Note
SQLProcedures がすべての手続きを返すとは限りません。 アプリケーションは、 SQLProceduresによって返されるかどうかに関わらず、任意の有効な手続きを使用できます。
以下の列はODBC 3*.x*に改名されています。 カラム名の変更は後方互換性には影響しません。なぜならアプリケーションはカラム番号でバインドするからです。
| ODBC 2.0 列 | ODBC 3*.x*欄 |
|---|---|
| 手順修飾子 | PROCEDURE_CAT |
| PROCEDURE _OWNER | PROCEDURE _SCHEM |
PROCEDURE_CAT、PROCEDURE_SCHEM、PROCEDURE_NAMEの各カラムの実際の長さを決定するために、アプリケーションはSQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_PROCEDURE_NAME_LENのオプションで SQLGetInfo を呼び出すことができます。
次の表に、結果セットの列を示します。 8列(PROCEDURE_TYPE)以降の追加列はドライバーによって定義可能です。 アプリケーションは、明示的な順序位置を指定するのではなく、結果セットの末尾からカウントダウンすることでドライバー固有の列にアクセスするべきです。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。
| 列名 | 列番号 | データの種類 | Comments |
|---|---|---|---|
| PROCEDURE_CAT(ODBC 2.0) | 1 | Varchar | 手続きカタログ識別子;データソースに適用できない場合はNULLです。 ドライバが一部のプロシージャにはカタログをサポートしているが、他のプロシージャには対応しない場合、例えば異なるDBMSからデータを取得する場合、カタログを持たないプロシージャに対して空文字列("")を返します。 |
| PROCEDURE_SCHEM(ODBC 2.0) | 2 | Varchar | プロシージャスキーマ識別子;データソースに適用できない場合はNULLです。 ドライバが一部のプロシージャに対してスキーマをサポートしているが、他のプロシージャにはサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、スキーマを持たないプロシージャに対して空の文字列("")を返します。 |
| PROCEDURE_NAME(ODBC 2.0) | 3 | ヴァルチャーはNULLではありません | 手続き識別子。 |
| NUM_INPUT_PARAMS(ODBC 2.0) | 4 | N/A | 将来の使用のために予約済み。 アプリケーションはこれらの結果列で返されるデータに依存すべきではありません。 |
| NUM_OUTPUT_PARAMS(ODBC 2.0) | 5 | N/A | 将来の使用のために予約済み。 アプリケーションはこれらの結果列で返されるデータに依存すべきではありません。 |
| NUM_RESULT_SETS(ODBC 2.0) | 6 | N/A | 将来の使用のために予約済み。 アプリケーションはこれらの結果列で返されるデータに依存すべきではありません。 |
| 備考(ODBC 2.0) | 7 | Varchar | 手順の説明。 |
| PROCEDURE_TYPE(ODBC 2.0) | 8 | Smallint | 手順の種類を定義します: SQL_PT_UNKNOWN: 手続きが値を返すかどうかは判別できません。 SQL_PT_PROCEDURE:返されるオブジェクトは手続きです。つまり、戻り値が存在しません。 SQL_PT_FUNCTION:返されたオブジェクトは関数です。つまり、戻り値を持つということです。 |
SchemaNameとProcNameの引数は検索パターンを受け入れます。 有効な検索パターンの詳細については、「 パターン値引数」を参照してください。
コード例
手順 の呼び出しを参照してください。
関連関数
| 詳細情報 | 参照先 |
|---|---|
| 結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
| ステートメント処理の取り消し | SQLCancel 関数 |
| 順方向に単一行またはデータブロックを取得する方法 | SQLFetch 関数 |
| データブロックのフェッチまたは結果セットのスクロール | SQLFetchScroll 関数 |
| ドライバーやデータソースに関する情報を返す | SQLGetInfo 関数 |
| 手順のパラメータおよび結果セットの列を返す | SQLProcedureColumns 関数 |
| ストアドプロシージャの呼び出しに関する構文 | ステートメントの実行 |