SQLSpecialColumns -取得特殊 (列 ID) 直欄

SQLSpecialColumns() 會傳回表格的唯一列 ID 資訊 (主要索引鍵或唯一索引)。 例如,唯一索引或主要索引鍵資訊。 此資訊會以 SQL 結果集傳回,您可以使用用來提取 SELECT 陳述式所產生結果集的相同函數來擷取此結果集。

Unicode (UTF-16) 相等: 此函數也可以與 Unicode (UTF-16) 字集搭配使用。 對應的 Unicode 函數為 SQLSpecialColumnsW()。 如需 DB2® CLI 的 Unicode 支援的相關資訊,請參閱 Db2 for i CLI 中的 Unicode

語法

SQLRETURN SQLSpecialColumns  (SQLHSTMT       hstmt,
                              SQLSMALLINT    fColType,
                              SQLCHAR        *szCatalogName,
                              SQLSMALLINT    cbCatalogName,
                              SQLCHAR        *szSchemaName,
                              SQLSMALLINT    cbSchemaName,
                              SQLCHAR        *szTableName,
                              SQLSMALLINT    cbTableName,
                              SQLSMALLINT    fScope,
                              SQLSMALLINT    fNullable);

函數引數

表 1. SQLSpecialColumns 引數
資料類型 引數 使用 說明
SQLHSTMT hstmt 輸入 陳述式控點。
SQLSMALLINT fCol類型 輸入 保留供未來使用,以支援其他類型的特殊直欄。

目前已忽略此資料類型。

SQLCHAR * szCatalog名稱 輸入 三段式表格名稱的型錄限定元。 這必須是空值指標或零長度字串。
SQLSMALLINT cbCatalog名稱 輸入 szCatalog名稱的長度。 這必須設為 0。
SQLCHAR * szSchema名稱 輸入 指定表格的綱目限定元。
SQLSMALLINT cbSchema名稱 輸入 szSchema名稱的長度。
SQLCHAR * szTable名稱 輸入 表格名稱。
SQLSMALLINT cbTable名稱 輸入 cbTable名稱的長度。
SQLSMALLINT fScope 輸入 唯一列 ID 有效的所需持續時間下限。
fScope 必須是下列其中一個值:
  • SQL_SCOPE_CURROW-只有在該列上定位時,才保證該列 ID 有效。 如果橫列已由另一個交易更新或刪除,則稍後使用相同橫列 ID 值重新選取可能不會傳回橫列。
  • SQL_SCOPE_TRANSACTION-保證列 ID 在現行交易期間有效。
  • SQL_SCOPE_SESSION-保證列 ID 在連線期間有效。
橫列 ID 值保證有效的持續時間取決於現行交易隔離層次。 如需涉及隔離層次的相關資訊及實務範例,請參閱 IBM® DB2 SQL 參考資料
SQLSMALLINT fNullable 輸入 這決定是否傳回可以具有空值的特殊直欄。
必須是下列其中一個值:
  • SQL_NO_NULLS

    傳回的列 ID 直欄集不能有任何空值。

  • SQL 可為空值

    傳回的列 ID 直欄集可以包括允許 NULL 值的直欄。

用法

如果有多種方法可唯一識別表格中的任何列 (例如,如果指定表格上有多個唯一索引) ,則 Db2 for i CLI 會根據其內部準則傳回 最佳 列 ID 直欄集。

如果沒有直欄集容許唯一識別表格中的任何列,則會傳回空的結果集。

會以結果集的形式傳回唯一列 ID 資訊,其中列 ID 的每一個直欄由結果集中的一列代表。 SQLSpecialColumns() 傳回的結果集具有下列直欄,順序如下:
表 2. SQLSpecialColumns 傳回的直欄
直欄號碼/名稱 資料類型 說明
1 個 SCOPE SMALLINT 不是 NULL Rowid 的實際範圍。 這包含下列其中一個值:
  • SQL_SCOPE_CURROW
  • SQL 範圍 _ 交易
  • SQL_SCOPE_SESSION

請參閱 表 1 中的 fScope ,以取得每一個值的說明。

2 直欄 _ 名稱 VARCHAR (128) 非空值 列 ID 直欄的名稱。
3 個資料 _ 類型 SMALLINT 不是 NULL 直欄的 SQL 資料類型。
4 TYPE_NAME VARCHAR (128) 非空值 與 DATA_TYPE 直欄值相關的名稱所代表的「資料庫管理系統 (DBMS)」字串。
5 直欄 MN_SIZE INTEGER 直欄的精準度。 對於精準度不適用的資料類型,會傳回空值。
6 BUFFER_LENGTH INTEGER 預設 C 類型所傳回資料的長度 (以位元組為單位)。 對於 CHAR 資料類型,這與 LENGTH_PRECITION 直欄中的值相同。
7 DECIMAL_DIGITS SMALLINT 直欄的小數位數。 如果資料類型的小數位數不適用,則會傳回空值。
8 虛擬直欄 SMALLINT 這指出直欄是否為虛擬直欄; Db2 for i CLI 只會傳回:
  • SQL_PC_NOT_虛擬

回覆碼

  • SQL_SUCCESS
  • SQL_SUCCESS_WITH_INFO
  • SQL_ERROR
  • SQL_INVALID_HANDLE

診斷

表 3. SQLSpecialColumns SQLSTATE
SQL狀態 說明 說明
24000 無效的游標狀態 要求游標相關資訊,但未開啟任何游標。
40003 * 陳述式完成不明 在函數完成處理之前, CLI 與資料來源之間的通訊鏈結失敗。
HY001 記憶體配置失敗 驅動程式無法配置支援處理或完成函數所需的記憶體。
HY009 無效的引數長度 其中一個長度引數的值小於 0 ,但不等於 SQL_NTS。
HY021 無效的內部描述子 內部描述子無法定址或配置,或包含無效的值。
HYC00 驅動程式無法使用 資料來源不支援三段式表格名稱的 型錄 部分 (第一部分)。