SQLColumns[]
trả về danh sách các cột trong các bảng đã chỉ định. Thông tin được trả về trong tập kết quả SQL, có thể được truy xuất bằng cách sử dụng cùng các hàm tìm nạp tập kết quả mà một truy vấn tạo ra
Thông số kỹ thuật ODBC cho SQLColumns[]
Bảng 1. Thông số kỹ thuật của SQLColumns[]
Mức thông số kỹ thuật ODBC Trong thông số kỹ thuật X/Open CLI CAE?Trong thông số kỹ thuật ISO CLI?1. 0CóKhông
cú pháp
SQLRETURN SQLColumns [SQLHSTMT hstmt,
SQLCHAR FAR *szCatalogName,
SQLSMALLINT cbCatalogName,
SQLCHAR FAR *szSchemaName,
SQLSMALLINT cbSchemaName,
SQLCHAR FAR *szTableName,
SQLSMALLINT cbTableName,
SQLCHAR FAR *szColumnName,
SQLSMALLINT cbColumnName];
đối số chức năng
Bảng sau liệt kê kiểu dữ liệu, cách sử dụng và mô tả cho từng đối số trong hàm này
Bảng 2. SQLColumns[]
đối số Kiểu dữ liệuArgumentUseDescriptionSQLHSTMT hstmt inputXác định xử lý câu lệnh. SQLCHAR * szCatalogName inputIxác định bộ đệm có thể chứa giá trị mẫu để . Danh mục là phần đầu tiên của tên bảng gồm ba phần.
Đây phải là một con trỏ null hoặc một chuỗi có độ dài bằng không
SQLSMALLINT cbCatalogName inputXác định độ dài, tính bằng byte, của szCatalogName. This must be set to 0.SQLCHAR *szSchemaName inputIxác định bộ đệm có thể chứa giá trị mẫu để . SQLSMALLINT cbSchemaName inputChỉ định độ dài, tính bằng byte, của szSchemaName . SQLCHAR * szTableName inputIxác định vùng đệm có thể chứa giá trị mẫu để đủ điều kiện đặt kết quả theo tên bảng. SQLSMALLINT cbTableName inputChỉ định độ dài, tính bằng byte, của szTableName . SQLCHAR * szColumnName inputIxác định vùng đệm có thể chứa giá trị mẫu để đủ điều kiện đặt kết quả theo tên cột. SQLSMALLINT cb Tên cột inputChỉ định độ dài, tính bằng byte, của Column_Name .Cách sử dụng
Hàm này lấy thông tin về các cột của một bảng hoặc một tập hợp các bảng. Thông thường, bạn gọi hàm này sau khi bạn gọi
/* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
0 để xác định các cột của bảng. Sử dụng các chuỗi ký tự được trả về trong các cột TABLE_SCHEM và TABLE_NAME của tập kết quả /* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
0 làm đầu vào cho hàm nàySQLColumns[]
trả về một tập hợp kết quả tiêu chuẩn, được sắp xếp theo TABLE_CAT, TABLE_SCHEM, TABLE_NAME và ORDINAL_POSITION. Bảng 3 liệt kê các cột trong tập kết quả
Các đối số szSchemaName, szTableName và szColumnName chấp nhận .
Bởi vì các cuộc gọi tới SQLColumns[]
thường dẫn đến một truy vấn danh mục phức tạp và tốn kém, hãy sử dụng các cuộc gọi này một cách tiết kiệm và lưu kết quả thay vì lặp lại các cuộc gọi
Các cột VARCHAR của tập kết quả hàm danh mục được khai báo với thuộc tính độ dài tối đa là 128 byte [phù hợp với tiêu chuẩn ANSI/ISO SQL năm 1992 limits]. Because Db2 ít hơn 128 ký tự nên ứng dụng có thể chọn luôn dành 128 ký tự [cộng với dấu kết thúc nul] cho bộ đệm đầu ra. Ngoài ra, bạn có thể gọi
/* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
0 với đối số InfoType được đặt thành từng giá trị sau. - SQL_MAX_CATALOG_NAME_LEN, để xác định độ dài của các cột TABLE_CAT mà hệ thống quản lý cơ sở dữ liệu được kết nối hỗ trợ
- SQL_MAX_SCHEMA_NAME_LEN, để xác định độ dài của các cột TABLE_SCHEM mà hệ thống quản lý cơ sở dữ liệu được kết nối hỗ trợ
- SQL_MAX_TABLE_NAME_LEN, để xác định độ dài của các cột TABLE_NAME mà hệ thống quản lý cơ sở dữ liệu được kết nối hỗ trợ
- SQL_MAX_COLUMN_NAME_LEN, để xác định độ dài của cột COLUMN_NAME mà hệ thống quản lý cơ sở dữ liệu được kết nối hỗ trợ
Mặc dù các cột mới có thể được thêm vào và tên của các cột hiện có có thể thay đổi trong các bản phát hành sau này, nhưng vị trí của các cột hiện tại sẽ không thay đổi. Bảng sau đây liệt kê các cột trong tập hợp kết quả mà SQLColumns[]
hiện đang trả về
Bảng 3. Các cột được trả về bởi SQLColumns[]
Số cộtTên cộtKiểu dữ liệuMô tả1TABLE_CATVARCHAR[128]Luôn rỗng. 2TABLE_SCHEMVARCHAR[128]Xác định tên của giản đồ chứa TABLE_NAME. 3TABLE_NAMEVARCHAR[128] NOT NULLIxác định tên của bảng, dạng xem, bí danh hoặc từ đồng nghĩa. 4COLUMN_NAMEVARCHAR[128] NOT NULLXác định cột được mô tả. Cột này chứa tên cột của bảng, dạng xem, bí danh hoặc từ đồng nghĩa đã chỉ định. 5DATA_TYPESMALLINT NOT NULLXác định kiểu dữ liệu SQL của cột mà COLUMN_NAME chỉ ra. 6TYPE_NAMEVARCHAR[128] NOT NULLIxác định chuỗi ký tự đại diện cho tên của loại dữ liệu tương ứng với cột tập hợp kết quả DATA_TYPE. 7COLUMN_SIZEINTEGERNếu giá trị cột DATA_TYPE biểu thị một ký tự hoặc chuỗi nhị phân, thì cột này chứa độ dài ký tự tối đa cho cột.
Đối với các loại dữ liệu ngày, giờ, dấu thời gian, đây là tổng số ký tự được yêu cầu để hiển thị giá trị khi nó được chuyển đổi thành ký tự
Đối với các loại dữ liệu số, đây là tổng số chữ số hoặc tổng số bit được phép trong cột, tùy thuộc vào giá trị trong cột NUM_PREC_RADIX trong tập hợp kết quả
Đối với kiểu dữ liệu XML, độ dài bằng 0 được trả về
8BUFFER_LENGTHINTEGERCho biết số byte tối đa cho bộ đệm C được liên kết để lưu trữ dữ liệu từ cột này nếu SQL_C_DEFAULT được chỉ định trên các lệnh gọi/* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
3, /* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
4 và /* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */
5. Độ dài này không bao gồm bất kỳ bộ kết thúc nul nào. Đối với các loại dữ liệu số chính xác, độ dài chiếm phần thập phân và dấu. 9DECIMAL_DIGITSSMALLINT cho biết tỷ lệ của cột. NULL được trả về cho các loại dữ liệu không áp dụng tỷ lệ. 10NUM_PREC_RADIXSMALLINTSchỉ định 10, 2 hoặc NULLNếu DATA_TYPE là một loại dữ liệu số gần đúng, thì cột này chứa giá trị 2 và cột COLUMN_SIZE chứa số bit được phép trong cột
Nếu DATA_TYPE là loại dữ liệu số chính xác, thì cột này chứa giá trị 10 và COLUMN_SIZE chứa số chữ số thập phân được phép cho cột
Đối với các kiểu dữ liệu số, hệ thống quản lý cơ sở dữ liệu có thể trả về giá trị NUM_PREC_RADIX là 10 hoặc 2
NULL được trả về cho các loại dữ liệu không áp dụng cột NUM_PREC_RADIX
11NULLABLESMALLINT NOT NULLChứa SQL_NO_NULLS nếu cột không chấp nhận giá trị nullChứa SQL_NULLABLE nếu cột chấp nhận giá trị null
12REMARKSVARCHAR[762]Chứa bất kỳ thông tin mô tả nào về cột. 13COLUMN_DEFVARCHAR[254]Xác định giá trị mặc định cho cộtNếu giá trị mặc định là một chữ số, thì cột này chứa biểu diễn ký tự của chữ số không có dấu nháy đơn kèm theo
Nếu giá trị mặc định là một chuỗi ký tự, thì cột này là chuỗi đó, được đặt trong dấu nháy đơn
Nếu giá trị mặc định là giả chữ , chẳng hạn như đối với các cột NGÀY, GIỜ và DẤU THỜI GIAN, thì cột này chứa từ khóa của .
Nếu NULL được chỉ định làm giá trị mặc định, cột này sẽ trả về từ NULL, không có dấu nháy đơn kèm theo
Nếu giá trị mặc định không thể được biểu thị mà không bị cắt bớt, thì cột này chứa giá trị ĐƯỢC CẮT TRUNCATED không có dấu nháy đơn kèm theo
Nếu không có giá trị mặc định nào được chỉ định, cột này là null
14SQL_DATA_TYPESMALLINT NOT NULLCho biết kiểu dữ liệu SQL. Cột này giống với cột DATA_TYPEĐối với các loại dữ liệu ngày giờ, trường SQL_DATA_TYPE trong tập hợp kết quả là SQL_DATETIME và trường SQL_DATETIME_SUB trả về mã con cho loại dữ liệu ngày giờ cụ thể [SQL_CODE_DATE, SQL_CODE_TIME hoặc SQL_CODE_TIMESTAMP]
- SQL_CODE_DATE
- SQL_CODE_TIME
- SQL_CODE_TIMESTAMP
Chứa độ dài tối đa tính bằng byte cho một cột dữ liệu ký tự. Đối với các bộ ký tự một byte, giá trị này giống như COLUMN_SIZE. Đối với loại XML, số 0 được trả về. Đối với các loại dữ liệu không phải là kiểu dữ liệu ký tự hoặc kiểu dữ liệu XML, nó là null
17ORDINAL_POSITIONINTEGER NOT NULLVị trí thứ tự của cột trong bảng. Cột đầu tiên trong bảng là số 1. 18IS_NULLABLEVARCHAR[254]Chứa chuỗi 'KHÔNG' nếu cột được biết là không thể rỗng;Tập hợp kết quả mà bảng trước mô tả giống hệt với đặc tả tập hợp kết quả X/Open CLI Columns[], là phiên bản mở rộng của tập hợp kết quả SQLColumns[]
mà ODBC 2. 0 chỉ định. Tập hợp kết quả ODBC SQLColumns[]
bao gồm mọi cột ở cùng một vị trí cho đến cột NHẬN XÉT
Db2 Các ứng dụng ODBC phát hành SQLColumns[]
đối với máy chủ Db2 cho z/OS® sẽ mong đợi .
Trả lại mã
Sau khi bạn gọi SQLColumns[]
, nó sẽ trả về một trong các giá trị sau
- SQL_SUCCESS
- SQL_SUCCESS_WITH_INFO
- SQL_ERROR
- SQL_INVALID_HANDLE
chẩn đoán
Bảng sau đây liệt kê từng SQLSTATE mà hàm này tạo ra, với mô tả và giải thích cho từng giá trị
Bảng 4. SQLColumns[]
SQLSTATE SQLSTATEMô tảGiải thích08S01 Lỗi liên kết giao tiếp. Liên kết giao tiếp giữa ứng dụng và nguồn dữ liệu không thành công trước khi chức năng hoàn tất. 24000 Trạng thái con trỏ không hợp lệ. Con trỏ đang mở trên bộ điều khiển câu lệnh. HY001 Lỗi cấp phát bộ nhớ. Db2 ODBC không thể phân bổ bộ nhớ cần thiết để hỗ trợ thực thi hoặc hoàn thành chức năng. HY010 Lỗi chuỗi hàm.
Hàm được gọi trong quá trình thực thi dữ liệu. [Nghĩa là, hàm được gọi trong một thủ tục sử dụng các hàm SQLColumns[]
1 hoặc SQLColumns[]
2. ]
Ví dụ
Ví dụ sau đây cho thấy một ứng dụng truy vấn danh mục hệ thống để biết thông tin về các cột trong bảng. Hình 1. Một ứng dụng trả về thông tin về các cột của bảng
/* .. */
SQLRETURN
list_columns[SQLHDBC hdbc, SQLCHAR *schema, SQLCHAR *tablename ]
{
/* .. */
rc = SQLColumns[hstmt, NULL, 0, schema, SQL_NTS,
tablename, SQL_NTS, "NTS];
rc = SQLBindCol[hstmt, 4, SQL_C_CHAR, [SQLPOINTER] column_name.s, 129,
&column_name.ind];
rc = SQLBindCol[hstmt, 6, SQL_C_CHAR, [SQLPOINTER] type_name.s, 129,
&type_name.ind];
rc = SQLBindCol[hstmt, 7, SQL_C_LONG, [SQLPOINTER] &length,
sizeof[length], &length_ind];
rc = SQLBindCol[hstmt, 9, SQL_C_SHORT, [SQLPOINTER] &scale,
sizeof[scale], &scale_ind];
rc = SQLBindCol[hstmt, 12, SQL_C_CHAR, [SQLPOINTER] remarks.s, 129,
&remarks.ind];
rc = SQLBindCol[hstmt, 11, SQL_C_SHORT, [SQLPOINTER] & nullable,
sizeof[nullable], &nullable_ind];
printf["Schema:
/* Fetch each row, and display */
while [[rc = SQLFetch[hstmt]] == SQL_SUCCESS] {
printf[" name.s];
if [nullable == SQL_NULLABLE] {
printf[", NULLABLE"];
} else {
printf[", NOT NULLABLE"];
}
printf[", name.s];
if [length_ind != SQL_NULL_DATA] {
printf[" [
} else {
printf["[\n"];
}
if [scale_ind != SQL_NULL_DATA] {
printf[",
} else {
printf["]\n"];
}
} /* endwhile */
/* .. */