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

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

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( ).

运行结果截图如下:

image.png

SINGLE 和 DISTINCT 区别


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


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.

结果如下:


image.png


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

相关文章
|
3月前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
|
3月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
3月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
3月前
|
SQL 应用服务中间件 数据库
关于 ABAP OPEN SQL SELECT 语句的一些额外说明
关于 ABAP OPEN SQL SELECT 语句的一些额外说明
|
3月前
|
SQL 监控 Oracle
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
|
3月前
|
前端开发 开发工具 Android开发
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
|
3月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
|
3月前
|
开发者 供应链 BI
SAP ABAP CALL SUBSCREEN 代码解析
SAP ABAP CALL SUBSCREEN 代码解析
|
3月前
|
存储 数据处理 开发者
ABAP 如何把 unicode 代码点转换成字符
ABAP 如何把 unicode 代码点转换成字符