SQLProcedures 函式

符合性
推出版本:ODBC 1.0 標準合規性:ODBC

總結
SQLProcedures 會回傳儲存在特定資料來源中的程序名稱清單。 程序 是一個通用術語,用來描述可 執行物件或可透過輸入與輸出參數呼叫的命名實體。 欲了解更多程序資訊,請參閱 程序

Syntax

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

Arguments

StatementHandle
[輸入]語句句柄。

目錄名稱
[輸入]手術目錄。 若驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有目錄的資料表。 目錄名稱 不能包含字串搜尋模式。

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,目錄 名稱 被視為識別碼,其大小寫不重要。 如果是SQL_FALSE,目錄 名稱 是一個普通的參數;它被字面上處理,且其案例意義重大。 如需詳細資訊,請參閱目錄函式中的引數

名稱長度1
[輸入]*目錄名稱的字元長度。

結構名稱
[輸入]程序結構名稱的字串搜尋模式。 若驅動程式支援某些程序的結構,但不支援其他程序,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有結構的程序。

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,SchemaName 被視為識別碼,其情況不重要。 若為 SQL_FALSE,SchemaName 是一個模式值參數;它被字面上處理,且其案例意義重大。

名稱長度2
[輸入]*SchemaName.

程序名稱
[輸入]程序名稱的字串搜尋模式。

若 SQL_ATTR_METADATA_ID 陳述式屬性設為 SQL_TRUE,ProcName 被視為識別碼,其案例不重要。 如果是 SQL_FALSE,ProcName 是一個模式值參數;它被字面上處理,且其案例意義重大。

名稱長度3
[輸入]*ProcName字元長度。

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

Diagnostics

SQLProcedures 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可以透過呼叫 SQLGetDiagRec 並設定 HandleType 為 SQL_HANDLE_STMT 及 Handle StatementHandle 來取得相應的 SQLSTATE 值。 下表列出 SQLProcedures 常回傳的 SQLSTATE 值,並在此函式情境下說明每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

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

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

呼叫函式,並在完成執行之前,從多線程應用程式中的不同線程呼叫語句Handle 或 SQLCancelHandle
HY009 無效的 Null 指標使用 SQL_ATTR_METADATA_ID 陳述屬性設為 SQL_TRUE,CatalogName 參數為空指標,SQL_CATALOG_NAME InfoType 回傳支援目錄名稱。

(DM) SQL_ATTR_METADATA_ID 陳述式屬性設為 SQL_TRUE,SchemaNameProcName 參數為空指標。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當呼叫這個函式時,這個非同步函式仍在執行中。

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

(DM) 呼叫 StatementHandle 的異步執行函式(而非此函式),並在呼叫此函式時仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,並傳回SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
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 ,才能執行後續處理並完成作業。

評論

SQLProcedures 列出所有請求範圍內的程序。 使用者可能有或沒有執行這些程序的權限。 為了檢查無障礙性,應用程式可以呼叫 SQLGetInfo 並檢查SQL_ACCESSIBLE_PROCEDURES資訊值。 否則,應用程式必須能處理使用者選擇無法執行的程序的情況。 關於如何使用這些資訊,請參見 程序

備註

欲了解更多關於 ODBC 目錄函式的一般用途、參數及回傳資料,請參見 目錄函式。

SQLProcedures 會以標準結果集的形式回傳結果,依PROCEDURE_CAT、PROCEDURE_SCHEMA 和 PROCEDURE_NAME 排序。

備註

SQLProcedures 可能無法回傳所有程序。 應用程式可以使用任何有效的程序,無論該程序是否由 SQLProcedures 回傳。

以下欄位已更名為 ODBC 3*.x*。 欄位名稱的變更不會影響向下相容性,因為應用程式是以欄位編號綁定的。

ODBC 2.0 欄位 ODBC 3*.x* 欄位
PROCEDURE_QUALIFIER 程序類別
PROCEDURE _OWNER PROCEDURE _SCHEM

為了確定PROCEDURE_CAT、PROCEDURE_SCHEM和PROCEDURE_NAME欄位的實際長度,應用程式可以呼叫 SQLGetInfo ,並提供 SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN 和 SQL_MAX_PROCEDURE_NAME_LEN 選項。

下表列出結果集中的欄位。 驅動程式可定義第 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 不是 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:回傳的物件是一個函數;也就是說,它有一個返回值。

SchemaNameProcName 參數接受搜尋模式。 欲了解更多有效搜尋模式的資訊,請參閱 模式值參數

程式代碼範例

詳見 程序呼叫

如需有關 看!
將緩衝區系結至結果集中的數據行 SQLBindCol 函式
取消語句處理 SQLCancel 函式
以僅向前向的方向擷取單一列或資料區塊 SQLFetch 函式
擷取數據區塊或捲動結果集 SQLFetchScroll 函式
回傳驅動程式或資料來源資訊 SQLGetInfo 函式
回傳程序的參數與結果集欄位 SQLProcedureColumns 函數
呼叫儲存程序的語法 執行語句