正文部分
从7.40开始,SP08可以使用在INTO之后用7.40,SP02引入的声明运算符DATA(...)来放置内联声明。
下面举例说明比较清晰:
代码语言:javascript复制
DATA id TYPE scarr-carrid.
cl_demo_input=>request( CHANGING field = id ).
SELECT SINGLE carrname AS name, carrid AS id
FROM scarr
WHERE carrid = @id
INTO @DATA(result).
cl_demo_output=>display( result ).
看到语法不同了吗,如果没看到,请回到你现有的系统中对比
上面语法是INTO DATA里面的写法,下面说一下INTO TABLE里的写法
举例说明:
代码语言:javascript复制
SELECT carrname AS name, carrid AS id
FROM scarr
INTO 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表达式
对上述的描述,下面举例说明更清楚一点
代码语言:javascript复制
SELECT num1, num2,
CASE WHEN col1 < 50 AND col2 < 50 THEN @both_l
WHEN col1 >= 50 AND col2 >= 50 THEN @both_gt
ELSE @others
END AS group
FROM demo_expressions
ORDER BY group
INTO TABLE @DATA(results).
在SELECT列表中,可以使用语法data_source〜*从7.40,SP08开始指定数据源的所有列。 这在使用连接时很方便。
举例说明:
代码语言:javascript复制
SELECT scarr~carrname, spfli~*, scarr~url
FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid
INTO 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概念。