EGL move 语句以下列三种方式中的任何一种复制数据。第一种选择是逐个字节复制数据;第二种选择(称为按名称)将数据从一个结构中的命名字段复制至另一个结构中的同名字段;第三种选择(称为按位置)将一个结构中每个字段的数据复制至另一个结构中处于同等位置的字段。
否则,缺省选择是按名称复制数据。
通过参考下列类别,可以很好地理解该语句:
源和目标可为如下所示:
名称为星号(*)的固定结构字段不是作为源字段提供的,但该字段的子结构中的所有命名字段都可用。
move myRecord01 to myRecord02 byName;
10 empnum CHAR(3); 10 empname CHAR(20);
10 empnum CHAR(3)[10]; 10 empname CHAR(20)[10];
该操作将第一个固定记录中的字段 empnum 的值复制至结构字段数组 empnum 的第一个元素;将第一个固定记录中的字段 empname 的值复制至结构字段数组 empname 的第一个元素;并且对源数组中的每个固定记录执行同样的操作。
10 mySubStructure[10] 15 empnum CHAR(3); 15 empname CHAR(20);
10 empnum CHAR(3); 10 empname CHAR(20)[10];
10 empnum char(3)[10]; 10 empname char(20);
将字段 empnum 的值从源复制至目标中的 empnum 的第一个元素;将 empname 的第一个元素的值从源复制至目标中的字段 empname。
源和目标可为如下所示:
在记录与固定结构间移动数据时,只考虑固定结构的顶层字段。在两个固定结构间移动数据时,只考虑每个结构的最底层(叶)字段。
如果源或目标字段是多维结构字段数组或其容器是数组的一维结构字段数组,则该操作无效。
10 empnum CHAR(3); 10 empname CHAR(20);
10 empnum CHAR(3)[10]; 10 empname CHAR(20)[10];
该操作将第一个固定记录中的字段 empnum 的值复制至结构字段数组 empnum 的第一个元素;将第一个固定记录中的字段 empname 的值复制至结构字段数组 empname 的第一个元素;并且对源数组中的每个固定记录执行同样的操作。
10 mySubStructure[10] 15 empnum CHAR(3); 15 empname CHAR(20);
10 empnum CHAR(3); 10 empname CHAR(20)[10];
10 empnum char(3)[10]; 10 empname char(20);
将字段 empnum 的值从源复制至目标中的 empnum 的第一个元素;将 empname 的第一个元素的值从源复制至目标中的字段 empname。
源和目标可为如下所示:
此情况下的 move 语句相当于多个 assignment 语句(每个目标数组元素一个赋值语句),如果尝试赋值无效,则可能会发生错误。有关有效性的详细信息,请参阅赋值。
如果源或目标元素具有固定结构,则 move 语句会将该结构视作类型为 CHAR 的字段,除非结构的顶层指定了另一基本类型。在使用 for all 时,move 语句不考虑子结构。
如果源是数组的元素,则源将被视作一个数组,其中的指定元素是第一个元素,先前的元素将被忽略。
如果源是数组或数组的元素,则源数组的每个连续元素将复制至目标数组中按顺序进行的下一个元素。目标数组或源数组可能较长,在另一数组中具有匹配元素的最后一个元素中的数据复制完毕后,操作就结束了。
如果源既不是数组也不是数组元素,则该操作会使用源值来初始化目标数组的每个元素。
move "abc" to target[7] for 3
move source[2] to target[7] for 3
在下列情况下,该操作有效:
move 语句相当于多个 assignment 语句(每个目标数组元素一个赋值语句),如果尝试赋值无效,则可能会发生错误。有关有效性的详细信息,请参阅赋值。
如果源或目标元素具有内部结构,则 move 语句会将该结构视作类型为 CHAR 的字段,除非该结构的顶层指定了另一基本类型。在使用 for count 时,move 语句不考虑子结构。
如果源是记录数组(或数组元素),则目标必须是记录数组。如果源是基本变量数组(或数组元素),则目标必须是基本变量数组或结构字段数组。如果源是结构字段数组(或数组元素),则目标必须是基本变量数组或结构字段数组。