更新时间:2026-10-21 GMT+08:00
命名SQL描述符区域
命名SQL描述符区域由头部描述符(Header)以及一个或多个条目描述符(Item Descriptor)构成。头部描述符存储与整个结果集相关的全局元数据,而每个条目描述符则精准描述结果行中某一具体列的属性与数据。
- 分配与释放描述符。 当不再需要这个描述符区域时,应及时释放:
EXEC SQL DEALLOCATE DESCRIPTOR identifier;
- 将结果集绑定至描述符。 在提取游标数据时,可以使用INTO子句将查询结果直接填充至指定的描述符区域中:
EXEC SQL FETCH NEXT FROM mycursor INTO SQL DESCRIPTOR mydesc;
即使查询返回的结果集为空,该描述符区域仍会正确填充并保留该查询的列元数据信息。
对于尚未执行的预编译语句,可以使用DESCRIBE得到其结果集的元数据:EXEC SQL BEGIN DECLARE SECTION; char *sql_stmt = "SELECT * FROM table1"; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE stmt1 FROM :sql_stmt; EXEC SQL DESCRIBE stmt1 INTO SQL DESCRIPTOR mydesc;
在DESCRIBE和FETCH语句中,INTO与USING关键字作用相似:均用于接收并生成结果集及其对应的描述符元数据。
- 检索描述符区域的元数据与数据。
当前只定义了一个头部描述符区域COUNT,用于获取结果集中包含的总列数(存入整数型宿主变量)。
要从特定列(第num列)中提取具体的属性或数据项,使用如下语法:EXEC SQL GET DESCRIPTOR name VALUE num :hostvar = field;
num可以是一个字符整数或者一个包含整数的宿主变量。可能的类型如下:- CARDINALITY(整数):结果集中的行数。
- DATA:实际提取到的数据项(变量数据类型须与查询字段相匹配)。
- DATETIME_INTERVAL_CODE(整数):当TYPE是9时,DATETIME_INTERVAL_CODE将具有以下值之一:1表示DATE,2表示TIME,3表示TIMESTAMP,4表示TIME WITH TIME ZONE,5表示TIMESTAMP WITH TIME ZONE。
- INDICATOR(整数):空值指示符,用于标识该字段是否为NULL或数据被截断(0表示正常,-1表示NULL)。
- LENGTH(整数):以字符计的数据长度。
- NAME(字符串):列字段名称。
- OCTET_LENGTH(整数):以字节计的数据字符表达的长度。
- PRECISION(整数):数字类型的精度(用于类型numeric)。
- RETURNED_LENGTH(整数):以字符数计的实际返回数据长度。
- RETURNED_OCTET_LENGTH(整数):以字节计的数据字符表达的长度。
- SCALE(整数):数字类型的小数位数/比例(专用于numeric类型)。
- TYPE(整数):该列数据类型的底层数字编码。
- 通过描述符设置输入参数。
- 使用数组宿主变量批量提取多行数据。
父主题: SQL描述符区域