INTO 语句大有可能
INTO target
后面跟的语句也有几种可能:
INTO
: target 为结构体,即选择字段值到对应结构体,参考SELECT SINGLE
示例INTO CORRESPONDING FIELD OF
: 系统会帮助我们选择和匹配对应的数据元素到相应的字段,要求自定义的字段名和系统的数据元素名称一样INTO [ obj1, obj2 ...]
: 我们可以选择一个与给定变量有关的字段。例如,如果我们想选择carrid
和connid
字段,我们可以选择这些字段直接给相关的变量,而不是一个结构体或内表INTO TABLE
: 这个功能与INTO
相似,但是我们跟的是一个表而不是一个结构体,因此可以获取多条数据INTO CORRESPONDING FIELDS OF TABLE
: 这本条功能与INTO CORRESPONDING FIELD OF
类似,区别也是在于可以获得不止一条数据,后面跟的是能够存储多条结果的内表APPPENDING
:当我们想追加新的记录,而不是用新的选择来替换它们时,可以使用APPENDING
,使用INTO
的结果就是替换
我们用代码来看一下 INTO
和 INTO CORRESPONDING FIELDS OF
:
SELECT carrid connid FROM sflight INTO TABLE gt_out.
这条语句会将 mandt
字段跳过,然后将 carrid
和 connid
替换成前两条的结果,导致想要的数据和字段并不匹配,客户端代码变成了 AA
数据,如图:
这个原因是 SELECT
只会尝试按照顺序将数据装入给定的字段。
为了解决这个问题,就需要用到 CORRESPONDING FILEDS OF
,如下:
SELECT carrid connid FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_out.
此时,查询的结果就会匹配了,没有查询的字段的值则为空,如下图:
PS:然后,与
INTO
相比,corresponding fields
有一个问题:在执行SELECT
和向对应字段添加数据时,字段的比较会花费更多的时间,尤其是在海量数据时比较明显。
APPENDING 语句
APPENDING
语句支持在不删除之前选择的行的情况下增加新的行。
SELECT carrid connid FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_out. SELECT mandt carrid connid fldate price FROM sflight APPENDING CORRESPONDING FIELDS OF TABLE gt_out.
INTO
部分我们只选择了查询 connid
和 carrid
字段,但是在接下来的 SELECT
中,我们使用 APPENDING
语句追加了同样的行,而且增加了 mandt
、fldate
和 price
字段。
总结
本文总结了 SAP ABAP 开发中最常用的查询语句: SELECT
语句,并从主体的三个部分进行语法拆解,SELECT result FROM source INTO target
,并分别介绍了它们的功能和可能会使用的语句。今后也会将这段时间以来的笔记总结并分享,希望对今后从事 SAP 开发的人有所帮助!