ABAP 新特性

1 新聚合函数ALLOW_PRECISION_LOSS

ABAP SQL如今支持新的聚合函数ALLOW_PRECISION_LOSS,它能够和SUM结合使用,以下降准确性为代价,提高性能。

2 窗口函数中的可选窗口帧

可选窗口帧规范容许定义窗口内行的子集,该子集称为帧。 帧是根据当前行肯定的,这使得它能够在窗口内移动。

3. 新窗口函数FIRST_VALUE和LAST_VALUE

ABAP SQL如今在窗口表达式中支持如下新窗口函数:函数
FIRST_VALUE和LAST_VALUE。

4. 新的日期/时间转换函数

如今,ABAP SQL支持如下新的日期/时间转换函数:post

TSTMPL_TO_UTCL和TSTMPL_FROM_UTCL
DATS_TO_DATN和DATS_FROM_DATN
TIMS_TO_TIMN和TIMS_FROM_TIMN

5. 新的时间戳函数

如今,ABAP SQL支持如下新的时间戳函数:性能
UTCL_CURRENT, UTCL_ADD_SECONDS和UTCL_SECONDS_BETWEEN.

6. 新的日期函数

如今,ABAP SQL支持如下新的日期函数:学习
DATN_DAYS_BETWEEN, DATN_ADD_DAYS和DATN_ADD_MONTHS.

7. ORDER BY子句后新的附加项

如今,ABAP SQL支持如下新的日期函数ORDER BY子句后新的附加项:url
NULLS FIRST和NULLS LAST.

8. 新的聚合函数

如今,ABAP SQL支持如下新的聚合函数:spa
MEDIAN, STDDEV, VAR, CORR和CORR_SPEARMAN.

9. 新的几何变换函数

如今,ABAP SQL支持如下新的几何变换函数:
as_geo_json

10. SQL条件修正

操做符IN如今能够用于返回值元组的子查询。
示例代码

DATA cityfrom TYPE spfli-cityfrom VALUE 'Frankfurt'.
DATA cityto   TYPE spfli-cityto   VALUE 'New York'.
cl_demo_input=>new(
  )->add_field( CHANGING field = cityfrom
  )->add_field( CHANGING field = cityto
  )->request( ).
cityfrom =  to_upper( cityfrom ).
cityto   =  to_upper( cityto ).
SELECT *
       FROM spfli
       WHERE ( carrid, cityfrom, cityto )
         IN ( ( 'LH', @cityfrom, @cityto ),
              ( 'UA', @cityfrom, @cityto ) )
       INTO TABLE @DATA(itab).

cl_demo_output=>display( itab ).
 

SQL函数和cast表达式目前能够用在比较运算符的右侧。

11. 新的窗口函数NTILE

ABAP SQL如今在窗口表达式中支持如下新窗口函数:NTILE

12. SELECT, INTO target修改

在使用SELECT, INTO target时,宿主变量能够内联声明,即使FROM子句是动态的,只要全部SELECT清单是静态的。之前,结果集的结构,包括SELECT列表、FROM子句和任何indicator都须要是静态的。

13. 新的类型转换函数to_clob和to_blob

ABAP SQL如今在窗口表达式中支持新的类型转换函数to_clob和to_blob。

14. 新的货币转换函数currency_conversion

ABAP SQL如今支持新的货币转换函数currency_conversion。

示例,
DATA currency TYPE c LENGTH 5 VALUE 'USD'.

...

SELECT FROM demo_prices
       FIELDS id,
              currency_conversion(
                amount = amount,
                source_currency = currency,
                target_currency = @currency,
                exchange_rate_date = @sy-datlo,
                round = 'X',
                on_error =
                  @sql_currency_conversion=>c_on_error-fail )
                    AS amount,
                @currency AS currency
        INTO TABLE @DATA(converted_prices_asql).
 

15. 如今能够在SQL表达式中使用streaming和locators

如今能够在SQL表达式中使用streaming和locators,好比TO_CLOB, TO_BLOB和AS_GEO_JSON.

16. 基本SQL表达式支持更多类型

基本SQL表达式如今能够支持字典类型STRING和RAWSTRING.

17. Hierarchy载入选项

对于hierarchy生成器HIERARCHY,如今能够经过新的附加项LOAD BULK|INCREMENTAL|load_option指定载入策略。

18. 指定类型的字面量

如今能够在ABAP SQL中使用多种ABAP字典类型的指定类型的字面量。

语法:... dtype...

例如,

SELECT *
       FROM demo_ddic_types
       WHERE int8 = int8`32984723948723`
       INTO TABLE @DATA(result).

19. 新的字符函数

ABAP SQL如今支持一些新的正则处理函数,好比REPLACE_REGEXPR, LIKE_REGEXPR和 OCCURRENCES_REGEXPR

20. 在UPDATE FROM中指定更新列

如今能够在UPDATE FROM子句中经过set indicators指定更新列。

21.ABAP session(会话窗口)最大条目从6增加为16,通过调整参数rdisp/max_alt_modes修改

在这里插入图片描述

22.nametable处理过时,语法export nametab不能继续使用,import nametab依然兼容,同时删除表DDNTF

23.TYPES关键字支持通过INDICATORS选项

为当前类型定义一个indicator结构作为嵌套的子结构,可以作为ABAP SQL indicator在SQL读写操作中使用;如下图代码,实现只更新price列的效果,如果没有indicator,则所有非key列都会更新

TYPES wa TYPE sflight WITH INDICATORS ind. 

DATA itab TYPE TABLE OF wa WITH EMPTY KEY. 

SELECT carrid, connid, fldate, price 
       FROM sflight 
       WHERE carrid = char`LH` AND 
             connid = numc`0400` AND 
             fldate = @sy-datum 
       INTO CORRESPONDING FIELDS OF TABLE @itab. 

IF sy-subrc  = 0. 
  LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>). 
    <wa>-price *= '0.8'. 
    <wa>-ind-price = '01'. 
  ENDLOOP. 
  UPDATE sflight FROM TABLE @itab INDICATORS SET STRUCTURE ind. 
ENDIF. 

24.启用对PCRE正则表达式的支持

25.关键字replace添加新的选项VERBATIM,实现转义效果

26.聚合功能ALLOW_PRECISION_LOSS ,通过先计算小数位,提升小数位聚合的效率,但会产生一定的误差,参考示例程序PRECISION

27.SQL日期时间转换、时间戳、日期处理功能

SQL日期时间转换功能,实现日期新旧格式,以及timestamp和UTC格式的转换
TSTMPL_TO_UTCL and TSTMPL_FROM_UTCL
DATS_TO_DATN and DATS_FROM_DATN
TIMS_TO_TIMN and TIMS_FROM_TIMN
SQL时间戳处理功能
UTCL_CURRENT
UTCL_ADD_SECONDS
UTCL_SECONDS_BETWEEN
SQL日期处理功能
DATN_DAYS_BETWEEN
DATN_ADD_DAYS
DATN_ADD_MONTHS

28.关键字Order by 新选项 NULLS FIRST & NULLS LAST

29.新的SQL聚合功能,其中最后两个CORR关键字用于计算两列的相关系数

30.SQL功能函数

 AS_GEO_JSON,用于经纬度GEO格式从xstring到string的转换
 SQL转换函数to_clob && to_blob
 SQL转换函数currency_conversion
 SQL字符函数 REPLACE_REGEXPR, LIKE_REGEXPR, 和 OCCURRENCES_REGEXPR实现相应正则表达式功能 

31.可以通过公用表表达式(common table expression,以下简称CTE)访问CDS视图

现在可以使用语句WITH的WITH ASSOCIATIONS附加项来发布这些视图的association,以便在当前WITH语句的路径表达式中使用。附加项REDIRECT TO也可以用于替换前CTE或当前CTE发布的association的目标数据源。
如果使用了该附加项,语法检查会以7.53版本的严格模式运行

示例:网上检索到的
WITH
    +wo AS ( SELECT aufk~auart,aufk~erdat,afih~iwerk,afih~ingpr,aufk~vaplz,afih~iloan,equnr,aufk~objnr
             FROM aufk INNER JOIN afih
             ON aufk~aufnr = afih~aufnr ),
    +wocounts AS ( SELECT COUNT(*) AS wosum
              FROM +wo ),
    +co AS ( SELECT objnr,wrttp,
             SUM( wtg001 + wtg002 + wtg003 + wtg004 + wtg005 + wtg006 + wtg007 + wtg008 ) AS cost01,
             SUM( wtg009 + wtg010 + wtg011 + wtg012 + wtg013 + wtg014 + wtg015 + wtg016 ) AS cost02
             from v_cosp_view
             GROUP BY objnr,wrttp,versn
             HAVING wrttp IN ('01','04')
                    AND versn = '000' )
    SELECT +wo~auart,+wo~iloan,+wo~equnr,+co~wrttp,SUM( +wocounts~wosum ) AS wonum,
    sum( cost01 ) as cost01,
    sum( cost02 ) as cost02
    FROM +wo CROSS JOIN +wocounts
    INNER JOIN +co
    ON +wo~objnr = +co~objnr
    WHERE +wo~auart IN @s_auart
      AND +wo~erdat IN @s_erdat
      AND +wo~iwerk IN @s_iwerk
      AND +wo~ingpr IN @s_ingpr
      AND +wo~vaplz IN @s_vaplz
      AND +wo~iloan IN (
        SELECT iloan FROM iflot
              INNER JOIN iflos
              ON iflot~tplnr = iflos~tplnr
              WHERE strno IN @s_strno AND actvs = 'X')
      GROUP BY +wo~auart,+wo~iloan,+wo~equnr,wrttp
      INTO TABLE @DATA(lt_basic).

32.SELECT列表中的数字/CAST增强

此前,在SELECT查询中只能使用INT4类型范围内的值。现在,可以使用长度为31的数字,当其不在INT4类型范围内时,会被解释为DEC类型.
现在可以通过CAST表达式把INT1, INT2, INT3, INT4和INT8转换为DEC了。

33.CLIENT可以在子查询中指定了

这意味着在插入操作中指定的目标表的client可以不同于子查询数据源的client。如果没有在子查询中指定USING CLIENT,自动client操作会应用当前的client ID。在7.53之前,使用USING CLIENT指定的client ID也会在子查询中使用。
现在子查询的FROM子句可以访问使用INSERT语句填充的数据库表或经典视图,这意味着可以从一个client复制数据到另一个client。

34.在ABAP SQL的写语句MODIFY里

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

35

.程序调用中的替换服务

类CL_OSQL_REPLACE中的方法ACTIVATE_REPLACEMENT有了新参数FLG_SURVIVE_SUBMIT,允许在被调用的程序中进行重定向。

GROUP BY附加项GROUPING SETS

在一个SELECT语句中,可以使用GROUP BY附加项GROUPING SETS了。附加项GROUPING SETS可以在一个SELECT语句下进行多个分组聚合。也可以在一个语句中通过对相同的SELECT使用不同的GROUP BY子句分组、并且使用UNION来实现相同的功能。后者易出错并且对数据库来说更难优化。相比之下,GROUPING SETS附加项也使得解释和维护SELECT语句变得更简单。

37.聚合函数GROUPING

现在可以在SELECT语句中使用GROUPING函数。带有聚合函数GROUPING的聚合表达式在GROUP BY子句中担任分组集GROUPING SETS的分组函数。分组函数GROUPING可以区分出在结果集中的指定的列是否被聚合。只能在使用了包含GROUPING SETS附加项的GROUP BY子句的情况下使用该函数。

38.TYPES语句 Indicator structures

TYPES语句有了新的附加选项[INDICATORS],可以为给定的结构类型定义一个indicator structure子结构。indicator structure可以在ABAP SQL读写语句中用作ABAP SQL indicator。

TYPES wa TYPE sflight WITH INDICATORS ind.

DATA itab TYPE TABLE OF wa WITH EMPTY KEY.

SELECT carrid, connid, fldate, price
       FROM sflight
       WHERE carrid = char`LH` AND
             connid = numc`0400` AND
             fldate = @sy-datum
       INTO CORRESPONDING FIELDS OF TABLE @itab.

IF sy-subrc  = 0.

  LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>).
    <wa>-price *= '0.8'.
    <wa>-ind-price = '01'.
  ENDLOOP.

  UPDATE sflight FROM TABLE @itab INDICATORS SET STRUCTURE ind.

ENDIF.

39.Name Table的内部处理

name table (nametab)用于存储有着数据字典类型的运行期对象。name table会持久化存储在native数据库表DDNTT和DDNTF中。

在新版本中,它的内部处理发生了变化。
结果是:
不能再使用ABAP内部语句EXPORT NAMETAB,使用它会导致运行期错误。
考虑到向下兼容性,IMPORT NAMETAB依然得到了部分支持。访问DDIC Table类型会导致运行期错误。其它访问会导致ATC错误。
先前用于存储字段描述的的native数据库表DDNTF会被删除,不再得到支持。

40.新的可捕捉异常CX_SY_STRING_SIZE_TOO_LARGE

过去,导致string超过最大长度的操作总是会导致运行期错误STRING_SIZE_TOO_LARGE。现在,会触发可以处理的异常CX_SY_STRING_SIZE_TOO_LARGE。
在条件满足的情况下,对于语句CALL TRANSFORMATION,也可以处理该异常。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值