SQLProcedures 関数

準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ODBC

まとめ
SQLProcedures は、 特定のデータ ソースに格納されているプロシージャ名の一覧を返します。 Procedure は、 実行可能オブジェクト、または入力パラメーターと出力パラメーターを使用して呼び出すことができる名前付きエンティティを記述するために使用される一般的な用語です。 プロシージャの詳細については、「プロシージャ 」を参照してください。

構文

  
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の場合、 CatalogName は通常の引数です。これはリテラルとして扱われ、その場合は重要です。 詳細については、「 カタログ関数の引数」を参照してください。

NameLength1
[入力]*CatalogName の文字数。

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。

診断

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

SQLSTATE エラー 説明
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 に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 StatementHandleSQLCancel または SQLCancelHandle が呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。

関数が呼び出され、実行が完了する前に、マルチスレッド アプリケーションの別のスレッドから StatementHandleSQLCancel または SQLCancelHandle が呼び出されました。
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) StatementHandle に対して SQLExecuteSQLExecDirect、または SQLMoreResults が呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。

(DM) 非同期実行関数 (この関数ではなく) が StatementHandle に対して呼び出され、この関数が呼び出されたときにまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY090 文字列またはバッファーの長さが無効です (DM) 名前の長さの引数の 1 つの値が 0 未満でしたが、SQL_NTSと等しくありません。

名前の長さの引数の 1 つの値が、対応する名前の最大長の値を超えました。
HY117 トランザクションの状態が不明なため、接続が中断されます。 切断と読み取り専用の関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。
HYC00 省略可能な機能が実装されていません プロシージャ カタログが指定されており、ドライバーまたはデータ ソースがカタログをサポートしていません。

プロシージャ スキーマが指定されており、ドライバーまたはデータ ソースでスキーマがサポートされていません。

プロシージャ スキーマまたはプロシージャ名に文字列検索パターンが指定されており、データ ソースは、これらの引数の 1 つ以上の検索パターンをサポートしていません。

SQL_ATTR_CONCURRENCYとSQL_ATTR_CURSOR_TYPE ステートメント属性の現在の設定の組み合わせは、ドライバーまたはデータ ソースでサポートされていませんでした。

SQL_ATTR_USE_BOOKMARKS ステートメント属性は SQL_UB_VARIABLE に設定され、SQL_ATTR_CURSOR_TYPE ステートメント属性は、ドライバーがブックマークをサポートしていないカーソルの種類に設定されました。
HYT00 タイムアウトに達しました データ ソースが要求された結果セットを返す前に、クエリのタイムアウト期間が期限切れになりました。 タイムアウト期間は、 SQLSetStmtAttr (SQL_ATTR_QUERY_TIMEOUT) によって設定されます。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に関連付けられているドライバーは、この関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルを使用するたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する以前の非同期操作を完了するために呼び出されていません。 ハンドルの前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、ハンドルで SQLCompleteAsync を呼び出す必要があります。

説明

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_QUALIFIER 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) を超える追加の列は、ドライバーによって定義できます。 アプリケーションは、明示的な序数位置を指定するのではなく、結果セットの末尾からカウントダウンすることで、ドライバー固有の列にアクセスする必要があります。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。

列名 列番号 データ型 コメント
PROCEDURE_CAT (ODBC 2.0) 1 Varchar プロシージャ カタログ識別子。データ ソースに該当しない場合は NULL。 ドライバーが一部のプロシージャのカタログをサポートしているが、他のプロシージャではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、カタログがないプロシージャの空の文字列 ("") が返されます。
PROCEDURE_SCHEM (ODBC 2.0) 2 Varchar プロシージャ スキーマ識別子。データ ソースに該当しない場合は NULL。 ドライバーが一部のプロシージャのスキーマをサポートしているが、他のプロシージャではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、スキーマがないプロシージャの空の文字列 ("") が返されます。
PROCEDURE_NAME (ODBC 2.0) 3 Varchar not NULL プロシージャ識別子。
NUM_INPUT_PARAMS (ODBC 2.0) 4 該当なし 将来利用するために予約されています。 アプリケーションは、これらの結果列で返されるデータに依存しないようにする必要があります。
NUM_OUTPUT_PARAMS (ODBC 2.0) 5 該当なし 将来利用するために予約されています。 アプリケーションは、これらの結果列で返されるデータに依存しないようにする必要があります。
NUM_RESULT_SETS (ODBC 2.0) 6 該当なし 将来利用するために予約されています。 アプリケーションは、これらの結果列で返されるデータに依存しないようにする必要があります。
解説 (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 関数
1 つの行またはデータ ブロックを順方向にフェッチする SQLFetch 関数
データブロックのフェッチまたは結果セットのスクロール SQLFetchScroll 関数
ドライバーまたはデータ ソースに関する情報を返す SQLGetInfo 関数
プロシージャのパラメーターと結果セット列を返す SQLProcedureColumns 関数
ストアド プロシージャを呼び出すための構文 ステートメントの実行

参照

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