可以将任何数字类型(包括 NUMC 和 PACF)的值赋予具有任何数字类型和大小的字段,并且 EGL 会执行必需的转换来以目标格式保留数据。
根据需要添加或截断无意义的零。值的整数部分中的开头的零是没有意义的,就像值的小数部分中的结尾数字。
对于任何数字类型,可以使用系统变量 sysVar.overflowIndicator 来测试赋值或算术计算是否导致了算术溢出,并且可以设置系统变量 VGVar.handleOverflow 来指定此类溢出的后果。
如果发生了算术溢出,则目标字段中的值不会更改。如果未发生算术溢出,则根据目标字段的声明来调整赋予目标字段的值。
对定点类型的字段指定浮点值(类型 FLOAT 或 SMALLFLOAT)时,必要时目标值会被截断。如果源值为 108.357 并且定点目标有一个小数位(如目标接收到 108.3),将出现这种情况。
如果类型为 NUM 的值是负数并且被赋予类型为 CHAR 的值,则复制到字段中的最后一个字节是不可打印字符。
此运算等同于 NUM 至 NUM 的赋值。
如果类型为 NUMC 的目标的值是负数,则复制到类型为 CHAR 的目标中的最后一个字节是不可打印字符。
// NOT valid because February 30 is not a valid date myTS timestamp("yyyyMMdd"); myTS = "20050230";
// NOT valid if run in February myTS timestamp("dd"); myTS = "30";
在这种情况下,EGL 会按需要截断字符以确保目标项包含类型为 MBCHAR 的有效字符串,然后添加结束单字节空格(如果必要的话)。
sourceTimeStamp timestamp ("MMdd"); targetTimeStamp timestamp ("yyyyMMdd"); sourceTimeStamp = "1201"; // if this code runs in 2004, the next statement // assigns 20041201 to targetTimeStamp targetTimeStamp = sourceTimeStamp;
sourceTimeStamp02 timestamp ("ssff"); targetTimeStamp02 timestamp ("mmssff"); sourceTimeStamp02 = "3201"; // the next assignment includes the minute // that is current when the assignment statement runs targetTimeStamp02 = sourceTimeStamp02;
sourceTimeStamp timestamp ("yyyyMM"); targetTimeStamp timestamp ("yyyyMMdd"); sourceTimeStamp = "200412"; // regardless of the day, the next statement // assigns 20041201 to targetTimeStamp targetTimeStamp = sourceTimeStamp;
sourceTimeStamp02 timestamp ("hh"); targetTimeStamp02 timestamp ("hhmm"); sourceTimeStamp02 = "11"; // regardless of the minute, the next statement // assigns 1100 to targetTimeStamp02 targetTimeStamp02 = sourceTimeStamp02;
可以将具有子结构的字段赋予不具有子结构的字段,反之亦然,并且可以在两个具有子结构的字段之间进行赋值。例如,假定名为 myNum 和 myRecord 的变量基于下列部件:
DataItem myNumPart NUM(12) end Record myRecordPart type basicRecord 10 topMost CHAR(4); 20 next01 HEX(4); 20 next02 HEX(4); end
在数学系统变量的外部,将类型为 HEX 的值赋予类型为 NUM 的项无效;但由于 topMost 的类型为 CHAR,所以格式为 myNum = topMost 的赋值有效。一般来说,赋值语句中的字段的基本类型控制赋值,并且不考虑下级项的基本类型。
缺省情况下,具有子结构的项的基本类型为 CHAR。如果将数据赋予具有子结构的字段或从具有子结构的字段进行数据赋值,并且在声明时未指定另一基本类型,则先前对类型为 CHAR 的字段描述的规则在赋值期间生效。
一条固定记录至另一条固定记录的赋值等同于将一个类型为 CHAR 的具有子结构的项赋予另一个类型为 CHAR 的具有子结构的项。长度不匹配会导致在接收到的值右边添加单字节空格或从接收到的值右边除去单字节字符。赋值不考虑下级结构字段的基本类型。
最后,如果将 SQL 记录赋予具有另一类型的记录或者将具有另一类型的记录赋予 SQL 记录,则必须确保非 SQL 记录有空间来存放每个结构字段前面的四字节区域。
相关概念
PageHandler