MOVE 语句将字段更改为“target”点标识的引用变量。
如果包含 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 中不是一元运算符。
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 语句从不创建新字段。
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;
关于引用变量的更多信息和移动引用变量的示例,请参阅创建动态字段引用。