使用 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 使用此语句。
在您以 DESCRIBE . . . USING SQL DESCRIPTOR 语句描述 EXECUTE FUNCTION、INSERT、SELECT 或 UPDATE 之后,可使用 GET DESCRIPTOR。
您在 GET DESCRIPTOR 语句中引用的主变量必须在程序的 BEGIN DECLARE SECTION 中声明。
如果在赋值给任何指定的主变量期间发生错误,则主变量的内容未定义。
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);
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");