MOVE 语句

MOVE 语句将字段更改为“target”点标识的引用变量。

语法

注:
  1. RepeatClause 只能与 PREVIOUSSIBLINGNEXTSIBLING 限定符一起使用。

如果包含 TO 子句,它将目标引用更改为与“source”指向同一条目。这可以是消息字段或已声明的变量。

如果包含 PARENT、PREVIOUSSIBLING、NEXTSIBLING、FIRSTCHILD 或 LASTCHILD 子句,则 MOVE 语句尝试相对于它的当前位置按指定的方向移动目标引用变量。如果给定的方向中存在任何字段,则移动成功。如果没有这样的字段,移动将失败;即,引用变量继续指向与以前相同的字段或变量,且 LASTMOVE 函数返回 false。您可以使用 LASTMOVE 函数来确定移动是成功还是失败了。

如果存在 TYPE 子句和/或 NAME 子句,目标再次按指定的方向(PREVIOUSSIBLING、NEXTSIBLING、FIRSTCHILD 或 LASTCHILD)移动到带有给定类型和/或名称的字段。当目标字段的名称和/或类型是已知的时,这特别有用,因为这减少了浏览到字段所需的 MOVE 语句的数目。这是因为将跳过不符合标准的字段;这也可以包含期望之外的消息树字段(例如,代表空格的消息树字段)。

如果无法完成指定的移动(即,带有给定类型或名称的字段不存在),目标仍保持未更改,且 LASTMOVE 函数返回 false。TYPE 和/或 NAME 子句可包含任何返回合适数据类型(对于类型为 INTEGER,对于名称为 CHARACTER)的值的表达式。如果提供的值为 NULL,则抛出一个异常。

两个另外的子句(NAMESPACE 和 IDENTITY)增强了 NAME 子句的功能。

NAMESPACE 子句使用任何返回类型为字符的非空值的表达式。它也使用 * 表示任何名称空间。注意:这不能与表达式混淆,因为 * 在 ESQL 中不是一元运算符。

如下所示,含义取决于 NAME 和 NAMESPACE 子句的存在:
NAMESPACE NAME 由...定位元素
类型和/或索引
缺省名称空间的名称
* 名称
名称空间
名称和名称空间

IDENTITY 子句使用单路径元素代替 TYPE、NAMESPACE 和 NAME 子句,且遵守有关字段引用的主题中描述的所有规则(请参阅ESQL 字段引用)。

当与 PREVIOUSSIBLING 或 NEXTSIBLING 一起使用 MOVE 时,您可以指定 REPEAT、TYPE 和 NAME 关键字,将目标移动到类型和名称与当前字段的相同的前一个或下一个字段。当移动到相同类型的同代时,REPEAT 关键字特别有用,因为您不必编写用于定义类型和名称的表达式。

示例

MOVE cursor FIRSTCHILD TYPE 0x01000000 NAME 'Field1';

本示例将引用变量“cursor”移动到“cursor”当前指向的字段的第一个子字段,它的类型为 0x01000000,名称为 Field1。

MOVE 语句从不创建新字段。

MOVE 语句通常的用法是从重复结构的一个实例移动到下一个实例。然后,可通过使用相对字段引用来访问结构中的字段。例如:
WHILE LASTMOVE(sourceCursor) DO
    SET targetCursor.ItemNumber  = sourceCursor.item;
    SET targetCursor.Description = sourceCursor.name;
    SET targetCursor.Price       = sourceCursor.prc;
    SET targetCursor.Tax         = sourceCursor.prc * 0.175;
    SET targetCursor.quantity    = 1;
    CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
    MOVE sourceCursor NEXTSIBLING REPEAT TYPE NAME;
END WHILE;

关于引用变量的更多信息和移动引用变量的示例,请参阅创建动态字段引用

相关概念
ESQL 概述
相关任务
正在开发 ESQL
创建动态字段引用
相关参考
语法图:可用类型
ESQL 语句
LASTMOVE 函数
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05090_