SQL 描述符范围是一个处理 SELECT 或者 FETCH 语句结果的更复杂的方法。一个 SQL 描述符范围把一行数据里的数据和原数据项 组合到了一个数据结构中。原数据在执行动态 SQL 语句的时候特别有用,因为结果 字段的性质可能是事先不知道的。
一个 SQL 描述符范围由一个头,(包含有关整个描述符的信息),一个或 多个项描述符范围,(基本上每个描述结果行中的一个字段)组成。
在你可以使用 SQL 描述符范围之前,你需要分配一个:
EXEC SQL ALLOCATE DESCRIPTOR identifier;
identifier 用做描述符范围的 "变量名"。 如果你不再需要这个描述符,你应该释放它:
EXEC SQL DEALLOCATE DESCRIPTOR identifier;
要使用一个描述符范围,在一个 INTO 子句的存储目标里 声明它,而不是列出宿主变量:
EXEC SQL FETCH NEXT FROM mycursor INTO DESCRIPTOR mydesc;
现在,我们应该如何从描述符范围里获取数据?你可以把描述符范围看作是 一个有着命名字段的结构。要从头里面检索数值并且把它存储到一个宿主 变量里,使用下面的命令:
EXEC SQL GET DESCRIPTOR name :hostvar = field;
目前只定义了一个头字段:COUNT,这个字段 告诉我们有几个项描述符范围存在(也就是说,在结果里包含多少个字段)。 宿主变量需要是一个整数类型。要从项描述符范围里获取一个字段, 使用下面的命令:
EXEC SQL GET DESCRIPTOR name VALUE num :hostvar = field;
num 可以是一个字符整数或者一个包含整数的 宿主变量。可能的 field 有:
结果集中的行数
实际的数据项(因此,这个字段的数据类型依赖于这个查询)
?
未实现
描述符(标识一个空值或者一个截断的值)
未实现
数据的字符长度
字段的名字
未实现
以字节计的数据的长度
精度(用于 numeric)
以字符计的数据长度
数据以字节计的长度
比例(用于 numeric )
字段数据类型的数值代码