共用方式為


SQLProcedureColumns 函式

一致性
引進的版本:ODBC 1.0 標準合規性: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時,可以呼叫 SQLGetDiagRec,並以 SQL_HANDLE_STMT HandleTypeHandleStatementHandle來取得相關聯的 SQLSTATE 值。 下表列出 SQLProcedureColumns 通常傳回的 SQLSTATE 值,並說明此函式內容中的每個值:表示法 “(DM)” 在驅動程式管理員傳回的 SQLSTATE 描述之前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結失敗 驅動程式與驅動程式連線的數據源之間的通訊連結在函式完成處理之前失敗。
24000 無效的數據指標狀態 StatementHandle上開啟數據指標,並已呼叫 SQLFetch 或 SQLFetchScroll SQLFetchScroll。 如果 SQLFetchSQLFetchScroll 尚未傳回SQL_NO_DATA,則驅動程式會傳回此錯誤,如果 SQLFetchSQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

StatementHandle上開啟數據指標,但尚未呼叫 SQLFetch
SQLFetchScroll
40001 串行化失敗 交易因為與另一個交易發生資源死結而回復。
40003 語句完成未知 此函式執行期間相關聯的連接失敗,且無法判斷交易的狀態。
HY000 一般錯誤 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLError 所傳回的錯誤訊息會描述錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY008 作業已取消 已針對 StatementHandle啟用異步處理。 已呼叫函式,並在完成執行之前,SQLCancelSQLCancelHandleStatementHandle上呼叫 。 然後在 StatementHandle上再次呼叫 函式。

已呼叫函式,並在完成執行之前,SQLCancelSQLCancelHandle 在多線程應用程式中 StatementHandle 上呼叫。
HY009 無效的 Null 指標使用 SQL_ATTR_METADATA_ID語句屬性已設定為 SQL_TRUE、CatalogName 自變數為 null 指標,而且 SQL_CATALOG_NAME InfoType 會傳回支援類別目錄名稱。

(DM) SQL_ATTR_METADATA_ID語句屬性已設定為 SQL_TRUE,而 SchemaNameProcNameColumnName 自變數為 null 指標。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle相關聯的連接句柄呼叫異步執行函式。 呼叫 SQLProcedureColumns 函式時,這個異步函式仍在執行中。

(DM) SQLExecuteSQLExecDirectSQLMoreResults 呼叫 StatementHandle 並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有數據流參數的數據之前,會呼叫此函式。

(DM) 異步執行函式 (不是此函式)已針對 StatementHandle 呼叫,而且在呼叫此函式時仍在執行中。

(DM) SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,已針對 StatementHandle 呼叫並傳回SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。
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 逾時已過期 在數據源傳回結果集之前過期的逾時期限。 逾時期間是透過 SQLSetStmtAttr設定,SQL_ATTR_QUERY_TIMEOUT。
HYT01 線上逾時已過期 在數據源回應要求之前,連線逾時期限已過期。 連線逾時期間是透過 SQLSetConnectAttr設定,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驅動程式不支援此函式 (DM) 與 StatementHandle 相關聯的驅動程式不支援 函式。
IM017 在異步通知模式中停用輪詢 每當使用通知模型時,輪詢就會停用。
IM018 尚未呼叫 SQLCompleteAsync,以完成此句柄上先前的異步操作。 如果句柄上的上一個函式呼叫傳回SQL_STILL_EXECUTING且啟用通知模式 ,則必須在句柄上呼叫 SQLCompleteAsync,才能執行後續處理並完成作業。

評論

在語句執行之前,通常會使用此函式來擷取程序參數的相關信息,以及組成程式所傳回結果集或集合的數據行,如果有的話。 如需詳細資訊,請參閱 程式

注意

SQLProcedureColumns 可能不會傳回程式所使用的所有數據行。 例如,驅動程式可能只傳回程式所使用之參數的相關信息,而不是它所產生的結果集中的數據行。

SchemaNameProcNameColumnName 自變數接受搜尋模式。 如需有效搜尋模式的詳細資訊,請參閱 Pattern Value Arguments

注意

如需 ODBC 類別目錄函式的一般使用、自變數和傳回資料的詳細資訊,請參閱 Catalog Functions

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:數據類型中的 數據行大小、十進位數、傳輸八位長度和顯示大小
BUFFER_LENGTH (ODBC 2.0) 9 整數 如果指定SQL_C_DEFAULT,SQLGetDataSQLFetch 作業上傳輸的數據長度。 對於數值數據,此大小可能與儲存在數據源上的數據大小不同。 如需詳細資訊,請參閱附錄 D:數據類型中的 數據行大小、十進位數、傳輸八位長度和顯示大小
DECIMAL_DIGITS (ODBC 2.0) 10 Smallint 數據源上程序數據行的十進位數。 NULL 會針對不適用小數位數的數據類型傳回 NULL。 如需十進位數的詳細資訊,請參閱附錄 D:數據類型中的 數據行大小、十進位數、傳輸八位長度和顯示大小
NUM_PREC_RADIX (ODBC 2.0) 11 Smallint 如果是數值數據類型,則為10或2。

如果為 10,COLUMN_SIZE 和 DECIMAL_DIGITS中的值會提供數據行允許的小數位數。 例如,DECIMAL(12,5) 數據行會傳回 10 的NUM_PREC_RADIX、12 的COLUMN_SIZE,以及 5 的DECIMAL_DIGITS;FLOAT 數據行可以傳回 10 的NUM_PREC_RADIX、15 的COLUMN_SIZE,以及 NULL 的DECIMAL_DIGITS。

如果為 2,COLUMN_SIZE 和 DECIMAL_DIGITS中的值會提供數據行中允許的位數。 例如,FLOAT 數據行可以傳回 2 的NUM_PREC_RADIX、53 的COLUMN_SIZE,以及 NULL 的DECIMAL_DIGITS。

null 會針對不適用NUM_PREC_RADIX的數據類型傳回。
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 數據類型的值,因為它出現在描述元的SQL_DESC_TYPE欄位中。 此數據行與DATA_TYPE數據行相同,但 datetime 和 interval 數據類型除外。

對於 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 屬性未知,此資料行會傳回長度為零的字串。

遵循 ISO 規則來判斷可為 Null 性。 符合 ISO SQL 標準的 DBMS 無法傳回空字串。

針對此數據行傳回的值與 NULLABLE 資料行所傳回的值不同。 (請參閱 NULLABLE 數據行的描述。

程式代碼範例

請參閱過程調用。

如需相關信息
將緩衝區系結至結果集中的數據行 SQLBindCol 函式
取消語句處理 SQLCancel 函式
以正向方向擷取單一數據列或數據區塊 SQLFetch 函式
擷取數據區塊或捲動結果集 SQLFetchScroll 函式
傳回數據源中的程式清單 SQLProcedures 函式

另請參閱

ODBC API 參考
ODBC 頭檔