GET DESCRIPTOR 语句

使用 GET DESCRIPTOR 语句来从系统描述符区域读取

语法

描述的项信息

元素 描述 限制 语法
descriptor 标识系统描述符区域(SDA)的带引号字符串 必须已经分配了系统描述符区域 用引号括起的字符串
descriptor_var 存储 descriptor 值的变量 descriptor 相同的限制 特定于语言
field_var 从 SDA 接收域内容的主变量 类型必须为可接收指定的 SDA 域的值 特定于语言
item_num 在 SDA 中描述的项的无符号序数 0 ≤ item_num ≤(在 SDA 中的项描述符的数量) 文字的数值
item_num_ var 存储 item_num 的主变量 必须为整数数据类型 特定于语言
total_items_var 存储在 SDA 中描述的项的数量的主变量 必须为整数数据类型 特定于语言

用法

请随同 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; 
下列 ESQL/C 示例使用 GET DESCRIPTOR 来从 demodesc 系统描述符区域获取数据类型信息:
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");
1 GBase 8s 扩展