正文部分
从7.40开始,SP08可以使用在INTO之后用7.40,SP02引入的声明运算符DATA(...)来放置内联声明。
下面举例说明比较清晰:
? DATA id TYPE scarr-carrid. cl_demo_input=>request( CHANGING field = id ).SELECT SINGLE carrname AS name, carrid AS idFROM scarrWHERE carrid = @idINTO @DATA(result).cl_demo_output=>display( result ).?
看到语法不同了吗,如果没看到,请回到你现有的系统中对比
上面语法是INTO DATA里面的写法,下面说一下INTO TABLE里的写法
举例说明:
? SELECT carrname AS name, carrid AS idFROM scarrINTO TABLE @DATA(result).cl_demo_output=>display( result ).?
看到语法不同了吗
根据SELECT列表中定义的结果集,声明基本数据对象,结构或内部表。 有关类型构造的详细信息,请参阅官方文档。
将7.40,SP05引入SELECT列表中的SQL表达式使用7.40,SP08进行了增强,如下所示:
1、可以在GROUP BY之后使用SQL表达式
2、可以与聚合一起使用SQL表达式
3、可以使用SQL表达式作为聚合的参数
4、可以使用除简单CASE之外的已搜索CASE表达式
对上述的描述,下面举例说明更清楚一点
? SELECT num1, num2,CASE WHEN col1 < 50 AND col2 < 50 THEN @both_lWHEN col1 >= 50 AND col2 >= 50 THEN @both_gtELSE @othersEND AS groupFROM demo_expressionsORDER BY groupINTO TABLE @DATA(results).?
在SELECT列表中,可以使用语法data_source?*从7.40,SP08开始指定数据源的所有列。 这在使用连接时很方便。
举例说明:
? SELECT scarr~carrname, spfli~*, scarr~urlFROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carridINTO TABLE @DATA(result).?
1、从7.40,SP08开始,INTO子句可以和应该(haha)在SELECT语句的其他子句之后使用。 那些不被视为子句的添加UP TO n ROWS,BYPASSING BUFFER和CONNECTION必须放在INTO子句之后。
2、此更改背后的原理是,INTO子句不是标准SQL的一部分,而是定义SQL和ABAP之间的数据接口。 为了实现Open SQL的SQL部分中的未来增强, UNION,必须从SQL部分中删除INTO子句。
一些限制已删除。 例如。 从7.40开始,SP08可以在SELECT列表中的算术表达式的运算符前面放一个减号,可以对聚合执行一个简单的CASE,在ON之后可以在连接条件中使用LIKE和IN(...) 您可以动态地在WHERE之后指定子查询。
但是,如果您使用此处列出的任何新功能(如SP05已有的),则将以严格模式执行Open SQL的语法检查,其中应用更严格的语法规则。 例如。 您必须在主机变量前使用逗号分隔的列表和转义符号@。 通过这种方式,至少在Open SQL ABAP中以向下兼容的方式实施一个依赖于发布的deprecation概念。
点击进入:SAP ABAP7.40新语法简介第二篇
我在公众号里写了很多SAP的文章
有兴趣可以关注一下