本篇主要讲解openSQL的基础内容
SAP ABAP openSQL数据库操作(二)
SAP ABAP openSQL数据库操作(三)
SAP ABAP openSQL数据库操作(四)
因为SAP系统中关系数据库表的创建和维护主要是通过数据字典
.
数据表的行结构是各个字段作为组件构成的,必须在数据字段中定义的数据元素,结构体或者表等数据类型.
用于定义数据库表之间的关系或实现数据表字段的输入值检查,还可以用于将几个数据表链接为一个视图或者锁定对象.
F2和F5,F4和F6 可以理解为是相同结构的,当我们在插入数据的时候必须同时插入T1 T2 所对应的外键字段,要不然会插入失败的.
技术设定可以理解为为数据库表附加的功能,比如说:是否要进行缓冲
或日志
等.
数据库表的缓冲机制,有点类似有Redis的作用.
缓冲机制有三种:
缓冲机制的意义就在于把首次查询的数据放在数据库的应用服务器缓冲区中,的那个下次再次查询的时候可以直接获取缓冲区中的数据,从而可以降低数据库的查询压力.
同时要注意缓冲区和数据库要保持一致性.以避免幻读脏读等情况.
LOG DATA CHANGES
设定表中的数据修改是否需要在日志中被记录.
可以看做一个仅包含部分字段的数据库表拷贝,而且数据已排序.索引包含指向实际数据表条目的指针,因而索引中不包含的字段也可以被快速访问.
一个数据库表可以包含一个主键和多个附属索引,主键包含表关键字和指向整个条目的指针,有系统自动生成并添加到数据库中.
索引的工作方式:
将关键字段排序存储.然后使用指针寻址真正的数据行.
在查询数据前首先要明白的问题:
基本SELECT
结构
SELECT select_clause
FROM from_clause
INTO into_clause
WHERE where_clause .
除了上面的基本结构外还可以添加
GROUP BY 分组
HAAVING 分组条件
ORDER BY 排序(默认升序)
SELECT select_clause
FROM from_tab
INTO into_tab
WHERE where_clause
GROUP BY fieldcat
HAVING condition
ORDER BY fieldcat.
如果只取一个数据行
SELECT SINGLE <result>
INTO <target>
FROM <source>.
1.选择全部字段
DATA wa_spfli TYPE spfli.
SELECT * FROM spfli
INTO wa_spfli
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
WRITE : / wa_spfli-cityfrom,wa_spfli-cityto.
2.单行选择指定字段
select后面的字段要和into后面的字段顺序一致
DATA wa_carrid TYPE spfli-carrid.
DATA wa_connid TYPE spfli-connid.
SELECT SINGLE carrid connid
FROM spfli
INTO (wa_carrid,wa_connid)
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
WRITE : / wa_carrid, wa_connid.
3.选择相关字段
如果你不能保证读取到的数据和你内表中的数据顺序字段是一致的可以使用CORRESPONDING FIELDS OF [TABLE]
SELECT SINGLE carrid connid
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
1.循环结构查询语法
SELECT [distinct] <result>..
<statement block>
ENDSELECT.
示例:
SELECT * FROM spfli
INTO wa_spfli
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
WRITE: / wa_spfli-carrid.
ENDSELECT.
2.选择到内表
语法:
SELECT * INTO|APPENDING
[CORRESPONDING FIELDS OF] TABLE itab
INTO
会将原有的内表数据覆盖
APPENDING
不会覆盖原有的内表数据,而是在原有的内表后面添加数据.
TYPES: BEGIN OF tab_type,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
END OF tab_type.
DATA: spfli_tab1 TYPE TABLE OF spfli,
spfli_tab2 TYPE TABLE OF tab_type.
*选择符合条件的整行数据,内表的结构和数据库表的结构是相同的
SELECT * FROM spfli
INTO TABLE spfli_tab1
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
*只把内表中有的字段进行输出
SELECT cityfrom cityto
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE spfli_tab2
WHERE cityfrom = 'SINGAPORE'
AND cityto = 'SAN FRANCISCO'.
3.指定选择包大小
举个例子:我有12本书,一个书包(容量:3本),现在用书包把书从学校拿回家.12/3=4
如果n<=0 运行时错误
SELECT * INTO TABLE itab PACKAGE SIZE n
<statement block>
ENDSELECT.
1.比较运算符
= < > <= >= <>
WHERE f = 'a'.
2.范围限定运算符
*字段f处于或不处于字段g和c之间才符合
WHERE f [NOT] BERWEEN g AND c.
3.字符比较运算符
*使用like运算符进行模式化的比较
WHERE f [NOT] LIKE g [BSCAPE h].
*字段f的值必须或不必须符合g的模式,下划线表示一个字符,百分号表示诺干个字符(模糊查询)
WHERE f city LIKE '%town%'.
4.检查列表值
是否满足或不满足括号中的一个值
WHERE f [NOT] IN (g,c,a,s).
5.检查空值
IS NULL
字段值是否为空,如果为null表示该字段下没有数据,但在数据字典中一般不会存在null,因为都会有初始值.
如果使用native SQL
进行空值设定,可能会出现空值现象,但abap也会将其字段进行初始化值.
WHERE f IS [NOT] NULL.
6.检查选择表
选择表是一种复杂而强大的逻辑表达式组合形式,其本身是一个内表,检查选择表意味着数据库字段需要满足所有逻辑板表达式的组合.
*选择code等于 99 或 00 且不等于 USA 的数据
WHERE ( code = '99' OR code = '00' )
AND NOT ( country = 'USA' ).
*也可以将查询条件放入内表中,动态指定,
*必须指定在括号内,没有空格
WHERE <condition> AND (itab).
3.5多表联查
多表联查的方式有左连接,内连接,右连接,子查询等,理论上来说子查询的效率是最低的.
1.SELECT语句嵌套
SAP ABAP openSQL数据库操作(二)