🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# GET DESCRIPTOR ## Name GET DESCRIPTOR -- 从SQL标识符区域获得信息 ## Synopsis ``` GET DESCRIPTOR _descriptor_name_ _:cvariable_ = _descriptor_header_item_ [, ... ] GET DESCRIPTOR _descriptor_name_ VALUE _column_number_ _:cvariable_ = _descriptor_item_ [, ... ] ``` ## 描述 `GET DESCRIPTOR`从SQL描述符区域检索关于查询结果集的信息, 并且将它存储到宿主变量中。在使用该命令将信息传递给宿主语言变量之前 通常使用`FETCH`或者`SELECT` 填充标识符区域。 该命令有两种形式:第一个形式检索描述符"头部"项, 适用于作为整体的结果集。 第二个形式需要作为额外参数的列数检索关于特定列的信息。 例子是列名和实际列值。 ## 参数 `_descriptor_name_` 描述符名字。 `_descriptor_header_item_` 一个标记识别检索的头部信息项。目前仅仅支持`COUNT` 可以获取结果集中的列数。 `_column_number_` 关于被检索的列数信息。计数从1开始。 `_descriptor_item_` 一个标记识别检索列的信息项。参阅[Section 33.7.1](#calibre_link-2008) 获取可支持项的列数。 `_cvariable_` 宿主变量将接收从描述符区域检索的数据。 ## 例子 检索结果集中列数的例子: ``` EXEC SQL GET DESCRIPTOR d :d_count = COUNT; ``` 在第一列中检索数据长度的例子: ``` EXEC SQL GET DESCRIPTOR d VALUE 1 :d_returned_octet_length = RETURNED_OCTET_LENGTH; ``` 检索作为字符串第二列的数据主体的例子: ``` EXEC SQL GET DESCRIPTOR d VALUE 2 :d_data = DATA; ``` 这是一个执行`SELECT current_database();`的整个程序的例子, 并且显示了列数,列数据长度和列数据: ``` int main(void) { EXEC SQL BEGIN DECLARE SECTION; int d_count; char d_data[1024]; int d_returned_octet_length; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO testdb AS con1 USER testuser; EXEC SQL ALLOCATE DESCRIPTOR d; /*声明,打开游标,并且分配描述符给游标 */ EXEC SQL DECLARE cur CURSOR FOR SELECT current_database(); EXEC SQL OPEN cur; EXEC SQL FETCH NEXT FROM cur INTO SQL DESCRIPTOR d; /*得到总列数*/ EXEC SQL GET DESCRIPTOR d :d_count = COUNT; printf("d_count = %d\n", d_count); /* 得到返回列的长度 */ EXEC SQL GET DESCRIPTOR d VALUE 1 :d_returned_octet_length = RETURNED_OCTET_LENGTH; printf("d_returned_octet_length = %d\n", d_returned_octet_length); /*读取返回列作为字符串*/ EXEC SQL GET DESCRIPTOR d VALUE 1 :d_data = DATA; printf("d_data = %s\n", d_data); /*关闭*/ EXEC SQL CLOSE cur; EXEC SQL COMMIT; EXEC SQL DEALLOCATE DESCRIPTOR d; EXEC SQL DISCONNECT ALL; return 0; } ``` 当执行该例子的时候,结果看起来像这样: ``` d_count = 1 d_returned_octet_length = 6 d_data = testdb ``` ## 兼容性 在SQL标准中指定`GET DESCRIPTOR`。 ## 参见 [ALLOCATE DESCRIPTOR](#calibre_link-28), [SET DESCRIPTOR](#calibre_link-651)