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 は通常の引数です。それは文字通り扱われ、そのケースは重要です。 詳細については、「 Catalog Functions の引数」を参照してください。
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を返す場合、関連付けられた SQLSTATE 値を取得するには、HandleType が SQL_HANDLE_STMT で、Handle of StatementHandle を指定して SQLGetDiagRec を呼び出します。 次の表に、 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 に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle が StatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、マルチスレッド アプリケーション内の別のスレッドから StatementHandle で SQLCancel または SQLCancelHandle が呼び出されました。 |
HY009 | null ポインターの使用が無効です | SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定され、 CatalogName 引数が null ポインターであり、SQL_CATALOG_NAME InfoType はカタログ名がサポートされていることを返します。 (DM) SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定され、 SchemaName、 ProcName、または ColumnName 引数が null ポインターでした。 |
HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この aynschronous 関数は、SQLProcedureColumns 関数が呼び出されたときに、まだ実行されていました。 (DM) StatementHandle に対して SQLExecute、SQLExecDirect、または SQLMoreResults が呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、ストリーミングされたすべてのパラメーターのデータが取得される前に呼び出されました。 (DM) 非同期実行関数 (この関数ではなく) が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。 (DM) StatementHandle に対して SQLExecute、SQLExecDirect、SQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
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 を呼び出す必要があります。 |
説明
通常、この関数はステートメントの実行前に使用され、プロシージャ パラメーターと、プロシージャによって返される結果セットまたはセットを構成する列 (存在する場合) に関する情報を取得します。 詳細については、「プロシージャ」を参照してください。
Note
SQLProcedureColumns では、プロシージャで使用されるすべての列が返されない場合があります。 たとえば、ドライバーは、プロシージャによって使用されるパラメーターに関する情報のみを返し、生成される結果セット内の列を返さない場合があります。
SchemaName、ProcName、および ColumnName 引数は、検索パターンを受け入れます。 有効な検索パターンの詳細については、「 パターン値の引数」を参照してください。
Note
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 |
PRECISION | COLUMN_SIZE |
LENGTH | BUFFER_LENGTH |
SCALE | DECIMAL_DIGITS |
RADIX | 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 (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 (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 (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 (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 | Integer (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 関数 |