【博主SAP/ABAP交流群53144545】
CRUD(增删改查)
C=Create
R=Read
U=Update
D=Delete
原子操作,不可再分割。
内表的CRUD(这里的内表仅指标准表)
1,查询
LOOP查询多行和READTABLE查询单行。
2,新增
APPEND 结构TO 内表。在内表的最后添加一条记录。
APPENDLINES OF 内表1 TO 内表2。在内表2的最后添加内表1的所有行。
INSERT 结构INTO 内表INDEX N。在内表的第N条记录前插入一条记录。
3,更新
MODIFY 内表FROM 结构INDEX N,更新第N条记录。利用TRANSPORTING关键字可以指定需要更新的字段。
在LOOP该内表时,可以不指定INDEX,即MODIFY内表FROM 结构,默认更新当前行。
4,删除
DELETE TABLE 内表 FROM 结构。
如果指定了内表的NON-UNIQUEKEY,那么只要结构和内表的KEY字段的值相同,就做删除;如果没有指定内表的KEY,就必须结构和内表的每个字段的值完全相同才做删除。
数据库表的CRUD
1,查询
SELECT语句
2,新增
INSERT 数据库表FROM TABLE 内表或者INSERT数据库表FROM 结构。
如果主键已存在,则新增失败,这时,如果是通过结构单条INSERT,sy-subrc返回4;如果是通过内表批量INSERT,则会引起DUMP。
可以使用关键字ACCEPTINGDUPLICATE KEYS防止批量INSERT时出现重复主键的记录而DUMP,使用该关键字后,如果出现重复主键的记录,则自动跳过该条记录。
3,更新
方法一:UPDATE数据库表FROM TABLE 内表或者UPDATE数据库表FROM 结构。
如果没有匹配的主键,则更新失败。
方法二:UPDATE数据库表SET 字段1= 'XXX' WHERE 字段2= 'XXX'。其中SET和WHERE里可以指定多个字段,SET和WHERE也可以使用相同字段。这种方法可以用来更新主键(但一般不推荐更新主键)。
4,删除
方法一:DELETE数据库表FROM TABLE 内表或者DELETE数据库表FROM 结构。
如果没有匹配的主键,则删除失败。
方法二:DELETE数据库表WHERE 字段1= 'XXX'。其中WHERE里可以指定多个字段。
*通过内表或者结构增改删数据库表,结构必须和数据库表一致。
* INSERT和UPDATE可以合并为MODIFY。如果主键已存在,作更新;如果主键不存在,作插入。
*使用内表批量操作时,只要有一条记录操作失败,则sy-subrc返回4。
*从效率角度出发,建议使用内表批量操作,而不是在LOOP循环里针对结构逐条操作。
FOR ALL ENTRIES的作用相当于是内表和数据库表版的INNER JOIN,但FOR ALL ENTRIES的底层实现是转化成WHERE条件里的IN,所以在内表取值范围较大时效率较低,这时尽可能用INNER JOIN去代替。