使用 GET DESCRIPTOR 语句来从系统描述符区域读取
用法
请随同 GBase 8s ESQL/C 使用此语句。
使用 GET DESCRIPTOR 语句来完成下列所有任务:
确定系统描述符区域描述了多少项。
确定系统描述符区域中描述的每一列或表达式的特征。
将值从系统描述符区域复制到 FETCH 语句之后的主变量。
在您以 DESCRIBE . . . USING SQL DESCRIPTOR 语句描述 EXECUTE FUNCTION、INSERT、
SELECT 或 UPDATE 之后,可使用 GET DESCRIPTOR。
您在 GET DESCRIPTOR 语句中引用的主变量必须在程序的 BEGIN DECLARE SECTION 中声
明。
如果在赋值给任何指定的主变量期间发生错误,则主变量的内容未定义。
示例
下列 ESQL/C 示例展示如何随同主变量使用 GET DESCRIPTOR 语句来确定名为 desc1: GET
DESCRIPTOR 的系统描述符区域中描述了多少项
main()
{
EXEC SQL BEGIN DECLARE SECTION;
int h_count;
EXEC SQL END DECLARE SECTION;
EXEC SQL allocate descriptor ‘desc1’ with max 20;
/* 这部分程序会将 SELECT 或 INSERT 语句准备到 s_id 语句 id 内。
*/EXEC SQL describe s_id using sql descriptor ‘desc1’;
EXEC SQL get descriptor ‘desc1’ :h_count = count;
EXEC SQL get descriptor ‘demodesc’ value
:index :type = TYPE,
:len = LENGTH,
:name = NAME;
printf(“Column %d: type = %d, len = %d, name = %s\n”,
index, type, len, name);
下列 ESQL/C 示例展示您可如何将数据从 DATA 域赋值到访存之后的主变量(结果)内。对于此示
例,预先约定所有返回值具有相同的数据类型:
EXEC SQL get descriptor ‘demodesc’ :desc_count = count;
… .
EXEC SQL fetch democursor using sql descriptor ‘demodesc’;
for (i = 1; i <= desc_count; i++)
{
if (sqlca.sqlcode != 0) break;
EXEC SQL get descriptor ‘demodesc’ value :i :result = DATA;
printf("%s ", result);
}
printf("\n");