首页 > 其他分享 >工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)

时间:2022-10-18 23:32:57浏览次数:65  
标签:语句 carrid INTO 查询 ABAP SAP SELECT out

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)_结果集

日常开发过程中,最常用的语句可能就是查询语句了。那么如果从数据库表中查询数据呢?

答: ​​select from​​ 语句。

SELECT 的三个部分

在 OPEN SQL中,​​SELECT​​ 语句可以查询数据字典中定义过的数据库或者视图中的数据。

常见语法:

SELECT result
FROM source
INTO target
[WHERE condition]
[GROUP BY fields]
[HAVING cond]
[ORDER BY fileds].

由上可知,​​SELECT​​ 语句主体至少由三个必须的部分构成:

  1. ​SELECT result​​ 部分
  2. ​FROM source​​ 部分
  3. ​INTO target​​ 部分

SELECT result 说明

第一部分是结果集。​​SELECT​​ 一般是查询多条数据到内表中,result 也就是结果集,用于查询指定的字段,说明我们想从选定的表中得到说明数据。

  • 可以查询一条,也可以查询多条。如果指定只查询一条数据,则要用结构体承载数据,而不是内表,后面要跟ENDSELECT ,但因为性能问题,SAP 也不推荐这种方式;

  • 如果查询单条数据到结构体后面不跟ENDSELECT,使用语法检查也会得到如下提示:
Incorrect nesting: Before the end of the program, the control structure introduced by "SELECT" must be closed by "ENDSELECT".
  • 既可以直接输入字段列表,也可以使用* 来获取表中所有的字段。同理,由于性能问题,不建议使用 * 号。通常业务中不会需要一个表中的所有字段;
  • 查询单条记录时用SINGLE 来指定,用 DISTINCT 语句可以在查询时删除重复值。

FROM source 说明

第二部分是 ​​FROM​​ 语句,用来定义我们要从哪个表或者视图 ​​source​​ 中获取数据。

  • ​FROM​​ 可以放到 INTO 表达式之前,也可以放在之后;
  • 如果是从多个表或视图中查询,可以用JOIN 语句连接表,ON 来指定连接条件,通过 AS 来指定表的别名;
  • 还可以通过UP TO n ROWS 来指定最多的查询记录,防止因一次查询的数据过多而导致出现性能问题;

INTO target 说明

第三部分是 ​​INTO​​ 语句,​​INTO​​ 后面的 target 用于指定查询出来的数据存储在何处,若有多条数据则存储在内表中,若是单条数据则存放在结构体中。

接着,我们来看一个组合这三个部分的简单例子:

*&---------------------------------------------------------------------*
*& Report zlerning_select
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zlerning_select.

DATA: BEGIN OF gs_out,
mandt TYPE sy-mandt,
carrid TYPE sflight-carrid, " 航线代码
connid TYPE sflight-connid, " 航班连接编号
fldate TYPE sflight-fldate, " 航班日期
END OF gs_out.
DATA: gt_out LIKE TABLE OF gs_out.

DATA: gr_alv TYPE REF TO cl_salv_table,
gr_columns TYPE REF TO cl_salv_columns_table.



SELECT mandt carrid connid fldate FROM sflight INTO TABLE gt_out.


CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_alv
CHANGING
t_table = gt_out.

gr_columns = gr_alv->get_columns( ).
gr_columns->set_optimize( value = 'X' ).
gr_alv->display( ).

运行结果截图如下:

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)_字段_02

SINGLE 和 DISTINCT 区别

SELECT 后面可以紧跟两个关键字 ​​SINGLE​​ 和 ​​DISTINCT​​ ,我们来看一下这两者的区别:

​SELECT SINGLE​​ 代码如下:

 SELECT SINGLE mandt carrid connid fldate FROM sflight INTO gs_out.

使用如上代码,可以获取一条记录。需要注意的是:

  • 使用这条语句最好跟上WHERE 条件,通常使用这种方式来获取描述表某个信息的描述
  • 当使用SELECT SINGLE 时,将不能使用 ORDER BYAPPENDING 语句。

​SELECT DISTINCT​​ 代码如下:

 SELECT DISTINCT mandt carrid connid FROM sflight INTO TABLE gt_out.

结果如下:

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)_数据_03

当我们想排除重复的行时,可以使用 ​​SELECT DISTINCT​​ 。正如上面结果中所看到的,Airline 和 Flight No. 在任何行中都是不一样的。

INTO 语句大有可能

​INTO target​​ 后面跟的语句也有几种可能:

  • ​INTO​​: target 为结构体,即选择字段值到对应结构体,参考 SELECT SINGLE 示例
  • ​INTO CORRESPONDING FIELD OF​​: 系统会帮助我们选择和匹配对应的数据元素到相应的字段,要求自定义的字段名和系统的数据元素名称一样
  • ​INTO [ obj1, obj2 ...]​​: 我们可以选择一个与给定变量有关的字段。例如,如果我们想选择 carridconnid 字段,我们可以选择这些字段直接给相关的变量,而不是一个结构体或内表
  • ​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 语句在 SAP ABAP 中的用法总结(上)_数据_04

这个原因是 ​​SELECT​​ 只会尝试按照顺序将数据装入给定的字段。

为了解决这个问题,就需要用到 ​​CORRESPONDING FILEDS OF​​,如下:

 SELECT carrid connid  FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_out.

此时,查询的结果就会匹配了,没有查询的字段的值则为空,如下图:

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)_字段_05

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​​ 字段。

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(上)_字段_06

总结

本文总结了 SAP ABAP 开发中最常用的查询语句: ​​SELECT​​ 语句,并从主体的三个部分进行语法拆解,​​SELECT result FROM source INTO target​​ ,并分别介绍了它们的功能和可能会使用的语句。今后也会将这段时间以来的笔记总结并分享,希望对今后从事 SAP 开发的人有所帮助!

标签:语句,carrid,INTO,查询,ABAP,SAP,SELECT,out
From: https://blog.51cto.com/yuzhou1su/5768333

相关文章

  • el-select change下拉获取对象
    <el-selectv-if="model"filterableclass="w"v-model="ruleForm.allModelId"placeholder="请选......
  • dd_jsapi
    调用<scriptsetuplang="ts">import{departmentsPicker}from"@/utils/lib/dd";import{ref}from"vue";interfaceDdDepartment{id:number;name:str......
  • ABAP 范围表 range table
    范围表定义:DATAgr_testTYPERANGEOFchar6.做选择屏幕的时候范围选择框默认就是一个范围表范围表内容:通过断点调试可以看到,范围表有4列signoptionlowhigh......
  • JDBC练习-select语句和JDBC工具类
    JDBC练习-select语句练习:定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。1.定义Emp类封装Emp表数据的JavaBean2.实现方法public List<Emp>findA......
  • Xml SelectNodes 与 XPath
     XPath是XML的内容,这里SelectNodes是C#中XmlDocument或XmlNode的一个方法。SelectNodes使用XPath来选取节点。重要语法:SelectNodes("item")    从......
  • SAP-MM-采购订单含税价实现方式
    在很多企业里,采购跟供应商谈定的价格是含税价。采购订单价格一般都是通过含税价来实现的,但是SAP的标准功能要求采购订单上面输入的价格是一个净价,即不含税价。如果客户不使......
  • ABAP SMARTFORMS和函数_1
                              自定义上传图片       ......
  • 如何更详细查看SAP 系统版本信息
    查看SAP系统的版本信息是每个Basis的基本功,版本信息主要有:NW版本、Kernel版本,ECC版本,S/4版本等。 以下我们就来聊一下如何查看SAP系统的版本:SAPNetWeaver版本NW版本......
  • SAP HANA SQL系列一:常用数据类型
     数据类型日期时间类型DATETIMESECONDDATETIMESTAMP数字类型SMALLINTINTEGERBIGINTDECIMAL(精度,小数位数)或DEC(p,s)SMALLDECIMALREALDOUBLEFLOAT(n)字符类型VARCHARNVAR......
  • SAP HANA SQL系列三:日期时间函数
    日期时间函数ADD_DAYSADD_MONTHSADD_SECONDSADD_YEARSCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRECT_UTCDATECURRENT_UTCTIMECURRENT_UTCTIMESTAM......