更新时间:2024-11-12 GMT+08:00
命名SQL描述符区域
一个命名SQL描述符区域由一个头部以及一个或多个条目描述符区域构成。头部包含与整个描述区域相关的信息,而条目描述符区域则描述结果行中的某一列。
- 在使用SQL描述符区域之前,需要分配一个SQL描述符区域:
EXEC SQL ALLOCATE DESCRIPTOR identifier;
- 当不再需要这个描述符区域时,应及时释放:
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关键词的使用相似:它们产生结果集以及一个描述符区域的元数据。
- 从头部检索一个描述符区域的值并且将其存储到一个宿主变量中:
EXEC SQL GET DESCRIPTOR name :hostvar = field;
- 当前只定义了一个头部描述符区域COUNT,它存放描述符区域的条目(即结果集中包含多少列),宿主变量为一个整数类型,需从条目描述符区域中得到一个具体值:
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(整数):指示符(表示一个空值或者一个值截断)
- LENGTH(整数):以字符计的数据长度
- NAME(string):列名
- OCTET_LENGTH(整数):以字节计的数据字符表达的长度
- PRECISION(整数):精度(用于类型numeric)
- RETURNED_LENGTH(整数):以字符计的数据长度
- RETURNED_OCTET_LENGTH(整数):以字节计的数据字符表达的长度
- SCALE(整数):比例(用于类型numeric)
- TYPE(整数):列的数据类型的数字编码
- 要检索字段数值并且把它存储到一个宿主变量里,使用如下命令:
EXEC SQL GET DESCRIPTOR mydesc VALUE num :hostvar = field
num可以是一个字符整数或者一个包含整数的宿主变量。可能的字段有:- DATA
- 实际数据项(这个字段的数据类型依赖于这个查询)
- NAME(string)
- 字段名称
- 手动建立一个描述符区域为一个查询或游标提供输入参数,使用如下命令:
EXEC SQL SET DESCRIPTOR name VALUE numfield = :hostvar;
- 在一个FETCH语句中检索多行记录且用数组类型的宿主变量来存储数据,示例如下:
EXEC SQL BEGIN DECLARE SECTION; int id[5]; EXEC SQL END DECLARE SECTION; EXEC SQL FETCH 5 FROM mycursor INTO SQL DESCRIPTOR mydesc; EXEC SQL GET DESCRIPTOR mydesc VALUE 1 :id = DATA;
父主题: SQL描述符区域