现在表缓存支持真null值了,null值不再被转换为类型初始值。在访问缓存时,会产生和直接访问数据库时一样的结果。不再存在相应的限制。这会影响到以下方面:
对于包含null值的关系表达式,现在在缓存中进行比较的时候,结果也是unknown了(除非表达式是IS [NOT] INITIAL)。
IS [NOT] NULL不再绕过缓存。
访问被缓存的CDS视图。当缓存被访问时,会产生和直接访问数据库相同的结果。null值通常由outer join或某些表达式如case表达式产生。已经不再存在只有不产生null值的CDS视图才能被缓存的限制。
13,限制移除对于某些SQL表达式和函数,ABAP SQL的读语句不再绕过缓存。
在不需要识别单行或者generic range的条件里,当某列指定在比较或者BETWEEN的右侧时,ABAP SQL读语句不再绕过缓存。前提是两个运算数都是数字类型的、并且不是DF16_DEC类型或者DF34_DEC,或者都是字符类型的,或者都是都是RAW类型、且具有相同长度。
14,弱检查在ABAP SQL语句里使用了不被全部数据库平台支持的特性时,不会再产生语法检查警告,而是产生扩展程序检查警告。
15,新检查如果以内表作为SELECT语句的数据源时,内表需要被传递给数据库表,会产生一个语法警告。可以使用pragma ##itab_db_select来隐藏这个语法检查警告。
16,程序调用中的替换服务类CL_OSQL_REPLACE中的方法ACTIVATE_REPLACEMENT有了新参数FLG_SURVIVE_SUBMIT,允许在被调用的程序中进行重定向。
17,GROUP BY附加项GROUPING SETS在一个SELECT语句中,可以使用GROUP BY附加项GROUPING SETS了。附加项GROUPING SETS可以在一个SELECT语句下进行多个分组聚合。也可以在一个语句中通过对相同的SELECT使用不同的GROUP BY子句分组、并且使用UNION来实现相同的功能。后者易出错并且对数据库来说更难优化。相比之下,GROUPING SETS附加项也使得解释和维护SELECT语句变得更简单。
18,聚合函数GROUPING现在可以在SELECT语句中使用GROUPING函数。带有聚合函数GROUPING的聚合表达式在GROUP BY子句中担任分组集GROUPING SETS的分组函数。分组函数GROUPING可以区分出在结果集中的指定的列是否被聚合。只能在使用了包含GROUPING SETS附加项的GROUP BY子句的情况下使用该函数。
过去在语法检查的严格模式的某些检查规则,现在在非严格模式下也会有效。在非严格模式下,违反这些规则会产生语法检查警告,在多数情况下,会导致程序运行期间产生运行时错误。
在访问视图时,键字段必须位于开始处。
在访问关联了CDS role的CDS entity时,不能使用附加项USING CLIENT和CLIENT SPECIFIED。
即使在使用路径表达式时, 附加项CLIENT SPECIFIED也只能用于特定于客户端的数据源。
指定列时,对于包含include结构的数据库表,必须使用组件的实际名称,而不是ABAP Dictionary中定义的任何组的名称。
使用关键字AS定义的SELECT列表的别名最多可包含30个字符。ORDER BY后也不允许使用超过30个字符的备用列名。
LCHR和LRAW类型的列只有在与相应长度字段一起读取时才能在查询中读取。
对于SELECT中的FOR ALL ENTRIES:
当数据源的列与内表列之间进行比较且它们的类型为p时,小数位必须匹配。
在ORDER BY之后使用PRIMARY KEY指定的主键的所有列也必须出现在SELECT列表中。