一、ABAP SQL
ABAP SQL是由ABAP实现的SQL命令,是ABAP语言的一部分。区别与原生的数据库SQL(Native SQL),ABAP SQL并不会直接在数据库中执行。用户看到的执行结果,其实是有SAP系统将ABAP SQL转换成Native SQL的执行结果。ABAP SQL转换到Native SQL的这个过程发生在SAP的数据库接口组件中。
二、解析
从connection表中查询指定出发地机场,代码如下
SELECT SINGLE
FROM /dmo/connection
FIELDS airport_from_id
WHERE carrier_id = 'LH'
AND connection_id = '0400'
INTO @airport_from_id.
ABAP SQL可读性很高,顺着关键字读下来,基本就知道要做什么。
1.select
select
用于查询数据,可以基于条件查询指定数据(配合where关键字),也可查询全部数据。select后接single
关键字,表示只查询复核条件的一条数据。
2.from
from
后接数据的来源,通常是表。并不是所有的数据来源都在from关键字后,在多表查询中,join关键字也会接一部分数据源。
2.fields
fields
关键字列举要查询的字段,为了可读性和性能,尽量将需要的字段都列出来,不推荐使用*号。
4.where and/or
查询条件,最常与and和or配合,取查询条件的交集或并集。
5.into
into
将查询结果放到指定的变量中,后常接@
或@data
,二者都是将查询结果放到指定的变量中,在变量声明过程中略有差异。
5.1.@
DATA airport_from_id TYPE /dmo/airport_from_id.
SELECT SINGLE
FROM /dmo/connection
FIELDS airport_from_id
WHERE carrier_id = 'LH'
AND connection_id = '0400'
INTO @airport_from_id.
out->write( |Flight LH 400 departs from { airport_from_id }| ).
如代码所示,@后的变量需提前声明。
5.2.@data
SELECT SINGLE
FROM /dmo/connection
FIELDS airport_from_id
WHERE carrier_id = 'LH'
AND connection_id = '0400'
INTO @data(airport_from_id).
out->write( |Flight LH 400 departs from { airport_from_id }| ).
@data相当于把@和data的作用合并了,直接在SQL语句中声明了变量airport_from_id。并且,airport_from_id的作用域不仅仅是SQL语句,该SQL语句之后都可以使用。
相比较而言,更推荐@和data分开使用,在SQL语句中声明变量容易被忽视,降低了代码可读性。
6.sy-subrc
SQL执行之后,建议判断下是否有结果返回,增加代码的健壮性,避免一些不必要的麻烦。
总结
打完收工。