ABAP 7.53 中的ABAP SQL(原Open SQL)新特性

S/4 HANA 1809 已经在上月发布,随之而来的是ABAP 7.53。

本次更新的内容较多,主要内容包括:Open SQL更名为ABAP SQL;新函数和表达式;限制移除;table buffer增强;更严格的语法检查规则等。

本文是更新文档中ABAP SQL的部分的翻译。

译者水平有限,如有错误之处,请评论指出。

1,Open SQL的新名字:ABAP SQL

Open SQL已经被更名为ABAP SQL。这个重命名反映出ABAP SQL的某些部分目前只支持特定的数据库平台(SAP HANA数据库),已经不再是全平台独立的了。

2,层次函数

层次函数(Hierarchy functions)是可以在查询中被指定为数据源的表函数(table function)。

3,辅助连接

在一个以SAP HANA为主数据库的ABAP应用服务器上,表DBCON里的辅助连接也应该是一个SAP HANA数据库。除了CONNECTION附加项以外,它也对ABAP SQL和NATIVE SQL生效。(ADBC和EXCE SQL)。

不再需要使用Database Shared Libraries (DBSL),而应使用SAP HANA Smart Data Access (SDA)。在SDA中,辅助数据库使用特殊限定名或使用虚拟表从SAP HANA数据库中寻址。如果将SAP HANA数据库是ABAP服务器主数据库,ABAP程序可以通过标准连接使用这些名字。只能通过AMDP或者Native SQL来使用这一功能。

4,关系表达式 IS INITIAL

可以在SQL条件中使用表达式 IS [NOT] INITIAL 来比较运算数和它们的类型初始值。

如果使用了该表达式,语法检查会以7.53版本的严格模式运行。

(译注:从文档来看,7.53版本的严格模式和7.52是相同的。)

5,日期/时间函数

ABAP SQL现增加了对以下日期/时间函数的支持:

时间函数

TIMS_IS_VALID

时间戳函数

TSTMP_IS_VALID

TSTMP_CURRENT_UTCTIMESTAMP

TSTMP_SECONDS_BETWEEN

TSTMP_ADD_SECONDS

日期/时间转换

TSTMP_TO_DATS

TSTMP_TO_TIMS

TSTMP_TO_DST  

时区函数

ABAP_USER_TIMEZONE

ABAP_USER_TIMEZONE

 如果使用了这些函数,语法检查会以7.53版本的严格模式运行。

6,发布公用表表达式的Associations

可以通过公用表表达式(common table expression,以下简称CTE)访问CDS视图,现在可以使用语句WITH的WITH ASSOCIATIONS附加项来发布这些视图的association,以便在当前WITH语句的路径表达式中使用。附加项REDIRECT TO也可以用于替换前CTE或当前CTE发布的association的目标数据源。

如果使用了该附加项,语法检查会以7.53版本的严格模式运行。

7,SELECT列表中的数字

此前,在SELECT查询中只能使用INT4类型范围内的值。现在,可以使用长度为31的数字,当其不在INT4类型范围内时,会被解释为DEC类型。

8,CAST增强

现在可以通过CAST表达式把INT1, INT2, INT3, INT4和INT8转换为DEC了。

9,INSERT语句子查询中的Client操作

现在,INSERT语句的附加项USING CLIENT可以在子查询中指定了。这意味着在插入操作中指定的目标表的client可以不同于子查询数据源的client。

如果没有在子查询中指定USING CLIENT,自动client操作会应用当前的client ID。在7.53之前,使用USING CLIENT指定的client ID也会在子查询中使用。

现在子查询的FROM子句可以访问使用INSERT语句填充的数据库表或经典视图,这意味着可以从一个client复制数据到另一个client。

使用这一特性时,语法检查会以7.53版本的严格模式运行。

10,以子查询为数据源的MODIFY

在ABAP SQL的写语句MODIFY里,可以在FROM关键字后面使用一个加上括号的SELECT subquery_clauses来实现以子查询作为数据源。子查询的数据结果集的行,会直接在数据库中插入或更新到目标表里。不再需要把数据从数据库传输到ABAP应用服务器了。

使用这一特性时,语法检查会以7.53版本的严格模式运行。

11,USING CLIENT和会话变量client

如果在一个ABAP SQL读语句中,存在对一个特定于客户端的CDS视图的多查询,并且该CDS视图中使用了annotation:@ClientHandling.algorithm:#SESSION_VARIABLE的话,多个查询中的会话变量client(相当于SAP HANA数据库中的ABAP特定会话变量CDS_CLIENT)必须设为同一值。如果为其中某项查询设定了不同的值,则会发生运行时错误SAPSQL_DIFFERENT_CLIENT_VALUES。这种情况会在使用了WITH语句或者UNION语句时发生。

12,表缓存中的null值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdyzy.html