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

简介: 在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分:1.SELECT result 部分2.FROM source 部分3.INTO target 部分

字符串匹配

LIKE 运算符可以有助于更好的从表里获取数据,只使用搜索部分字符,用法如下:LIKE 'XXX_'.


其中 XXX 代表我们正在寻找的单词的一部分,而 _ 下划线就代表任何其他的符号集,可以表示任何字母。比如想寻找以 L 结尾的 carrid 信息,就可以使用如下的代码:

SELECT mandt carrid connid fldate
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
  WHERE carrid LIKE '_L'.

最后查询的结果就会包括以 L 结尾的航线代码的相关信息,此处包括 DLJL

image.png

当使用 LIKE 时,我们必须有字符作为一个值。然而,如果我们想使用非字符格式,我们可以尝试使用 CAST


sflight 表中,我们有 CONNID,例如,它不是字符类型。

image.png

但是我们也想同样使用类似字符匹配的功能,就可以使用 CAST:

SELECT mandt, carrid, connid, fldate
  FROM sflight
  WHERE CAST( connid AS CHAR ) LIKE '19__'
  INTO CORRESPONDING FIELDS OF TABLE @gt_out.

比如上面的代码中,就想要找到以数字 19 开头的 connid 信息,查询结果如下:

image.png


这里有几个变化需要注意,首先:

  1. 需要用逗号将字段隔开,不然有如下报错:

image.png

  1. INTO 或者 APPENDING 需要放到查询语句的最后,不然又如下报错:

image.png

  1. 需要给内表加上 @ 符号,这个方式是 ABAP 7.4 SP05 以上版本提供的内联定义:

image.png

IN 条件运算符

IN 运算符用于在 SELECT 查询中创建一个范围,比如我们可以用括号包裹起来,在这个范围的结果都可以被查询出来,比如找出 carrid 为 AA、DL、LH 的信息:

SELECT carrid connid FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
    WHERE carrid IN ('AA', 'DL', 'LH').

除了在表中的字段,IN 还可以来使用选择屏幕中的范围,部分用法如下:

INTO CORRESPONDING FIELDS OF TABLE gt_out 
  WHERE a~vbeln IN so_vbeln
    AND a~posnr IN so_posnr
    AND b~erdat IN so_erdat.

更高级 IN 用法是使用范围表,四个字段:

  • SIGN
  • OPTION
  • LOW
  • HIGH

image.png

WHERE 中的动态 SELECT 查询

如果我们不知道我们在 WHERE 条件中需要什么字段,我们可以使用动态的 WHERE 条件,通过在运行时决定哪个字段被添加到 WHERE 条件中。

" 设定条件语句的格式为:gv_field = gv_value
DATA gv_where TYPE c LENGTH 100.
DATA gv_field TYPE c LENGTH 50 VALUE 'carrid'.
DATA gv_operator TYPE C LENGTH 10 VALUE 'EQ'.
DATA gv_value TYPE c LENGTH 50 VALUE '''LH'''.
CONCATENATE gv_field gv_operator gv_value INTO gv_where SEPARATED BY space.
" 查询数据,动态传入条件语句
SELECT mandt carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_out
  WHERE (gv_where).

统一能获取结果:

image.png

SINGLE FOR UPDATE

FOR UPDATE 语句可以用来为选定的行设置一个独占锁。然而,如果我们有一个以上的条目具有相同的主键,结果集将是空的。因此,指定全部的主键真的很重要。


此外,当我们的 FOR UPDATE 语句导致死锁时,将引发一个异常,SELECT 语句绕过 SAP 缓冲也很重要。

  SELECT SINGLE FOR UPDATE carrid connid 
    FROM sflight
    INTO CORRESPONDING FIELDS OF TABLE gs_out
    WHERE carrid EQ 'AA'.


GROUP BY

GROUP BY 用于分组查询,如分组求和的查询。

SELECT carrid connid
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE gt_sflight
  GROUP BY carrid connid.


GOURP BY 可以配合使用 AVG 平均值、COUNT 计数、MAX/MIN 取最大值/最小值、SUM 取和计算、STDDEV 取标准差等聚合方法进行查询分组计算。


HAVING 后的条件语句用于限制,在使用 GROUP BY 确定分组条件的语句。

相关文章
|
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月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
3月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
3月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
|
3月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍