次の方法で共有


SQLProcedureColumns 関数

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

の概要
SQLProcedureColumns は、入力パラメーターと出力パラメーターの一覧と、指定したプロシージャの結果セットを構成する列を返します。 ドライバーは、指定したステートメントの結果セットとして情報を返します。

構文

  
SQLRETURN SQLProcedureColumns(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CatalogName,  
     SQLSMALLINT   NameLength1,  
     SQLCHAR *     SchemaName,  
     SQLSMALLINT   NameLength2,  
     SQLCHAR *     ProcName,  
     SQLSMALLINT   NameLength3,  
     SQLCHAR *     ColumnName,  
     SQLSMALLINT   NameLength4);  

引数

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の文字数。

ColumnName
[入力]列名の文字列検索パターン。

SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、ColumnName は識別子として扱われ、大文字と小文字は区別されません。 SQL_FALSEの場合、ColumnName はパターン値の引数です。それは文字通り扱われ、そのケースは重要です。

NameLength4
[入力]*ColumnNameの文字数。

収益

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

SQLProcedureColumns がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、SQL_HANDLE_STMTの HandleType と StatementHandleの ハンドル を使用して、SQLGetDiagRec 呼び出すことによって、関連付けられた SQLSTATE 値を取得できます。 次の表に、SQLProcedureColumns によって一般的に返される 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 バッファー内の SQLError によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY008 操作が取り消されました StatementHandleに対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、StatementHandleで SQLCancel または sqlCancelHandle が呼び出 。 その後、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 に設定され、SchemaNameProcName、または ColumnName 引数が null ポインターでした。
HY010 関数シーケンス エラー (DM) StatementHandleに関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、SQLProcedureColumns 関数が呼び出されたときにまだ実行されていました。

(DM) SQLExecuteSQLExecDirect、または sqlMoreResults StatementHandle に対して呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。

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

(DM) SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPosStatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY090 文字列またはバッファーの長さが無効です (DM) 名前の長さの引数の 1 つの値が 0 未満でしたが、SQL_NTSと等しくありません。

名前の長さの引数のいずれかの値が、対応するカタログ、スキーマ、プロシージャ、または列名の最大長の値を超えました。
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 をハンドルで呼び出す必要があります。

コメント

通常、この関数はステートメントの実行前に、プロシージャ パラメーターに関する情報と、プロシージャによって返される結果セットまたは結果セットを構成する列 (存在する場合) を取得するために使用されます。 詳細については、「プロシージャの」を参照してください。

手記

SQLProcedureColumns は、プロシージャで使用されるすべての列を返さない場合があります。 たとえば、ドライバーは、プロシージャによって使用されるパラメーターに関する情報のみを返し、生成する結果セット内の列を返さない場合があります。

SchemaNameProcName、および ColumnName 引数は、検索パターンを受け入れます。 有効な検索パターンの詳細については、「パターン値の引数」を参照してください。

手記

ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「カタログ関数の」を参照してください。

SQLProcedureColumns は、PROCEDURE_CAT、PROCEDURE_SCHEM、PROCEDURE_NAME、およびCOLUMN_TYPE順に並べ替えられた標準の結果セットとして結果を返します。 各プロシージャの列名は、戻り値の名前、プロシージャ呼び出しの各パラメーターの名前 (呼び出し順)、およびプロシージャによって返される結果セット内の各列の名前 (列順) の順に返されます。

アプリケーションでは、結果セットの末尾に対してドライバー固有の列をバインドする必要があります。 詳細については、カタログ関数によって返されるデータの を参照してください。

PROCEDURE_CAT、PROCEDURE_SCHEM、PROCEDURE_NAME、およびCOLUMN_NAMEの列の実際の長さを調べるために、アプリケーションは、SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_PROCEDURE_NAME_LEN、およびSQL_MAX_COLUMN_NAME_LENオプションを使用して SQLGetInfo 呼び出すことができます。

ODBC 3 では、次の列の名前が変更されました。xをします。 列名の変更は、アプリケーションが列番号でバインドされるため、下位互換性には影響しません。

ODBC 2.0 列 ODBC 3。x
PROCEDURE_QUALIFIER PROCEDURE_CAT
PROCEDURE _OWNER PROCEDURE_SCHEM
精度 COLUMN_SIZE
長さ BUFFER_LENGTH
規模 DECIMAL_DIGITS
基数 NUM_PREC_RADIX

ODBC 3 の SQLProcedureColumns によって返される結果セット 次の列が追加されました。x:

  • COLUMN_DEF

  • DATETIME_CODE

  • CHAR_OCTET_LENGTH

  • ORDINAL_POSITION

  • IS_NULLABLE

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

列名 列番号 データ型 コメント
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 プロシージャ名。 名前のないプロシージャに対して空の文字列が返されます。
COLUMN_NAME (ODBC 2.0) 4 Varchar not NULL プロシージャの列名。 ドライバーは、名前のないプロシージャ列の空の文字列を返します。
COLUMN_TYPE (ODBC 2.0) 5 Smallint not NULL プロシージャ列をパラメーターまたは結果セット列として定義します。

SQL_PARAM_TYPE_UNKNOWN: プロシージャ列は、型が不明なパラメーターです。 (ODBC 1.0)

SQL_PARAM_INPUT: プロシージャ列は入力パラメーターです。 (ODBC 1.0)

SQL_PARAM_INPUT_OUTPUT: プロシージャ列は入力/出力パラメーターです。 (ODBC 1.0)

SQL_PARAM_OUTPUT: プロシージャ列は出力パラメーターです。 (ODBC 2.0)

SQL_RETURN_VALUE: プロシージャ列はプロシージャの戻り値です。 (ODBC 2.0)

SQL_RESULT_COL: プロシージャ列は結果セット列です。 (ODBC 1.0)
DATA_TYPE (ODBC 2.0) 6 Smallint not NULL SQL データ型。 ODBC SQL データ型またはドライバー固有の SQL データ型を指定できます。 datetime データ型と interval データ型の場合、この列は簡潔なデータ型 (SQL_TYPE_TIMEやSQL_INTERVAL_YEAR_TO_MONTHなど) を返します。 有効な ODBC SQL データ型の一覧については、「付録 D: データ型」の「SQL データ型」を参照してください。 ドライバー固有の SQL データ型の詳細については、ドライバーのドキュメントを参照してください。
TYPE_NAME (ODBC 2.0) 7 Varchar not NULL データ ソースに依存するデータ型名。たとえば、"CHAR"、"VARCHAR"、"MONEY"、"LONG VARBINARY"、または "CHAR ( ) FOR BIT DATA" などです。
COLUMN_SIZE (ODBC 2.0) 8 整数 データ ソースのプロシージャ列の列サイズ。 列サイズが適用されないデータ型の場合は NULL が返されます。 有効桁数の詳細については、「付録 D: データ型」の「列サイズ、10 進数、転送オクテット長、および表示サイズ を参照してください。
BUFFER_LENGTH (ODBC 2.0) 9 整数 SQLGetData で転送されるデータの長さ (バイト単位)、または SQLFetch 操作 (SQL_C_DEFAULTが指定されている場合)。 数値データの場合、このサイズはデータ ソースに格納されているデータのサイズとは異なる場合があります。 詳細については、「付録 D: データ型」の「列サイズ、10 進数、転送オクテット長、および表示サイズの」を参照してください。
DECIMAL_DIGITS (ODBC 2.0) 10 Smallint データ ソースのプロシージャ列の 10 進数。 10 進数が適用されないデータ型には NULL が返されます。 10 進数の詳細については、「付録 D: データ型」の「列サイズ、10 進数、転送オクテットの長さ、および表示サイズの」を参照してください。
NUM_PREC_RADIX (ODBC 2.0) 11 Smallint 数値データ型の場合は、10 または 2 です。

10 の場合、COLUMN_SIZEとDECIMAL_DIGITSの値は、列に使用できる 10 進数の数を示します。 たとえば、DECIMAL(12,5) 列は、NUM_PREC_RADIX 10、COLUMN_SIZE 12、DECIMAL_DIGITS 5 を返します。FLOAT 列は、NUM_PREC_RADIX 10、COLUMN_SIZE 15、DECIMAL_DIGITS NULL を返します。

2 の場合、COLUMN_SIZEとDECIMAL_DIGITSの値によって、列で許可されるビット数が与えられます。 たとえば、FLOAT 列は、NUM_PREC_RADIX 2、COLUMN_SIZE 53、DECIMAL_DIGITS NULL を返します。

NUM_PREC_RADIXが適用されないデータ型には NULL が返されます。
NULLABLE (ODBC 2.0) 12 Smallint not NULL プロシージャ列が NULL 値を受け入れるかどうか:

SQL_NO_NULLS: プロシージャ列は NULL 値を受け取りません。

SQL_NULLABLE: プロシージャ列は NULL 値を受け入れます。

SQL_NULLABLE_UNKNOWN: プロシージャ列が NULL 値を受け入れるかどうかは不明です。
解説 (ODBC 2.0) 13 Varchar プロシージャ列の説明。
COLUMN_DEF (ODBC 3.0) 14 Varchar 列の既定値。

NULL が既定値として指定された場合、この列は引用符で囲まれていない単語 NULL です。 既定値を切り捨てずに表すことができない場合、この列には TRUNCATED が含まれますが、引用符は囲んでいません。 既定値が指定されていない場合、この列は NULL です。

COLUMN_DEFの値は、TRUNCATED 値が含まれている場合を除き、新しい列定義の生成に使用できます。
SQL_DATA_TYPE (ODBC 3.0) 15 Smallint not NULL 記述子の SQL_DESC_TYPE フィールドに表示される SQL データ型の値。 この列は、datetime および interval データ型を除き、DATA_TYPE列と同じです。

datetime および interval データ型の場合、結果セットのSQL_DATA_TYPE フィールドはSQL_INTERVALまたはSQL_DATETIMEを返し、SQL_DATETIME_SUB フィールドは特定の間隔または datetime データ型のサブコードを返します。 (付録 D: データ型を参照してください)。
SQL_DATETIME_SUB (ODBC 3.0) 16 Smallint datetime および interval データ型のサブタイプ コード。 その他のデータ型の場合、この列は NULL を返します。
CHAR_OCTET_LENGTH (ODBC 3.0) 17 整数 文字またはバイナリ データ型の列の最大長 (バイト単位)。 その他のすべてのデータ型の場合、この列は NULL を返します。
ORDINAL_POSITION (ODBC 3.0) 18 整数が NULL ではない 入力パラメーターと出力パラメーターの場合、プロシージャ定義内のパラメーターの序数位置 (パラメーターの順序が 1 から始まる増加順)。 戻り値の場合 (存在する場合)、0 が返されます。 結果セット列の場合、結果セット内の列の序数位置。結果セットの最初の列は数値 1 です。 複数の結果セットがある場合は、列の序数位置がドライバー固有の方法で返されます。
IS_NULLABLE (ODBC 3.0) 19 Varchar 列に NULL が含まれていない場合は "NO" です。

列に NULL を含めることができる場合は "YES" です。

null 値の許容が不明な場合、この列は長さ 0 の文字列を返します。

ISO 規則に従って null 値の許容を判断します。 ISO SQL 準拠の DBMS は空の文字列を返すことができません。

この列に対して返される値は、NULLABLE 列に対して返される値とは異なります。 (NULLABLE 列の説明を参照してください)。

コード例

プロシージャ呼び出し参照してください。

詳細については、次の情報を参照してください。 見る
結果セット内の列へのバッファーのバインド SQLBindCol 関数 の
ステートメント処理の取り消し SQLCancel 関数の
1 つの行またはデータ ブロックを順方向にフェッチする SQLFetch 関数 の
データブロックのフェッチまたは結果セットのスクロール SQLFetchScroll 関数
データ ソース内のプロシージャの一覧を返す SQLProcedures 関数の

関連項目

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