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
NameLength1
[入力]*CatalogNameの文字数。
SchemaName
[入力]プロシージャ スキーマ名の文字列検索パターン。 ドライバーが一部のプロシージャのスキーマをサポートしているが、別のプロシージャではサポートされていない場合 (ドライバーが異なる DBMS からデータを取得する場合など)、空の文字列 ("") はスキーマを持たないプロシージャを示します。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、SchemaName は識別子として扱われ、大文字と小文字は重要ではありません。 SQL_FALSEの場合、SchemaName
NameLength2
[入力]*SchemaNameの文字数。
ProcName
[入力]プロシージャ名の文字列検索パターン。
SQL_ATTR_METADATA_ID ステートメント属性が SQL_TRUE に設定されている場合、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。
診断
SQLSTATE | エラー | 形容 |
---|---|---|
01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
24000 | カーソルの状態が無効です | |
40001 | シリアル化エラー | 別のトランザクションでリソースのデッドロックが発生したため、トランザクションがロールバックされました。 |
40003 | ステートメントの入力候補が不明です | この関数の実行中に関連付けられた接続が失敗し、トランザクションの状態を特定できません。 |
HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLError によって返されるエラー メッセージは、エラーとその原因を説明します。 |
HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY008 | 操作が取り消されました |
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、または ColumnName 引数が null ポインターでした。 |
HY010 | 関数シーケンス エラー | (DM) StatementHandleに関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、SQLProcedureColumns 関数が呼び出されたときにまだ実行されていました。 (DM) (DM) StatementHandle に対して非同期実行関数が呼び出され、この関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、SQLExecDirect、SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、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 は、プロシージャで使用されるすべての列を返さない場合があります。 たとえば、ドライバーは、プロシージャによって使用されるパラメーターに関する情報のみを返し、生成する結果セット内の列を返さない場合があります。
SchemaName、ProcName、および 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 によって返される結果セット
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 | 整数 | |
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 ヘッダー ファイル の