华为云云数据库GaussDB命名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描述符区域

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家