1.UPDATE实现对数据的更新操作,语法如下:
①.更新单行数据:
UPDATE dbtab SET f1=g1 ... fn=gn WHERE .
f表组建字段名,g为新设定的值,WHERE为确保只更新单行。
注:除f=g外还可 f=f+g、f=f-g
通过工作区更改单行数据:UPDATE dbtab FROM wa.
②.更新多行数据:
UPDATE dbtab SET f1=g1 ... fi=gi [WHERE ].
也可以使用SET和WHERE子句同时更新多行数据值;此外不需要在WHERE中限定所有表关键字,该语句本身将更新所有满足条件的数据条目,若不是用WHERE子句,则将更新当前数据集团中的所有数据行。
注:如果至少有一行数据被更新SY-BUBRC返回0,否则返回4。
2.INSERT(插入数据)
①.插入单行数据:
INSERT INTO dbtab VALUES wa.
INSERT INTO dbtab FROM wa.
wa为工作区,是与数据库具有相同结构的数据对象,一般直接基于数据库结构声明。该语句也可以将数据插入视图中,首先该视图所有字段必须来自同一个数据库表,而且在数据字典中的maintenance status属性必须设定为read and change
注:如果相同表关键字的数据条目已经存在,则不能重新插入,只能对非关键字进行更改(UPDATE,MODIFY)
②.插入多行数据
INSERT dbtab FROM TABLES itab.
其中itab是内表,包含希望插入的数据条目。
注:内表应与数据库的行结构一致。
所有条目成功插入,则SY-SUBRC返回0
使用ACCEPTING DUPLICATE可避免该错误。
INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS.
ACCEPTING DUPLICATE的效果是:若出现关键字相同,返回4,并跳过其再更新所有的其他。
3.MODIFY操作
MODIFY操作是用于修改数据库中的数据。与UPDATE操作不同的是,如何表中不存在符合条件的数据时会添加一样新数据。也就是说MODIFY拥有 INSERT 和 UPDATE的操作动作。不过通过MODIFY修改的数据效率比较低下,远不如UPDATE和INSERT操作。语法如下:
没有赋值的字段,modify会默认为空更新上去。
MODIFY <dbtab>.
MODIFY <dbtab> FROM TABLE <itab>.
MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 f2 ...]. “如果内表包含的行数少于idx,则不更改任何行.
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2 ...]. “根据工作区wa中关键词修改内表行, TRANSPORTING表示修改指定字段值.
MODIFY itab FROM wa TRANSPORTING f1 f2 ... WHERE condition. “修改符合WHERE子句中条件的内表中的指定字段值.
MODIFY语句是SAP的Open SQL中专有语句,该语句相当于INSERT和UPDATE语句的结合。引入期的原因是当更新数据库操作时,并不确知数据库中是否遗憾相应的数据行。
①.修改内表的一行:
MODIFY 表itab FROM 工作区wa_
TRANSPORTING Field1 Field2.---- WHERE 条件1 and 条件2.
*例子 :
MODIFY IT_SO_DATA FROM LV_SO_DATA TRANSPORTING EDAT
WHERE VBELN = LV_DELI_WEEK-VBELN AND POSNR = LV_DELI_WEEK-POSNR.
②.修改内表的多行:
MODIFY 表itab FROM 工作区wa_ INDEX 行号 TRANSPORTING Field1 Field2---.
*例子 :
MODIFY IT_PP_INFO FROM LV_PP_INFO INDEX LV_INDEX TRANSPORTING SERNR.
4.READ操作(可用于任何类型内表)
①READ TABLE itab [INTO wa|ASSIGNING <fs>] INDEX idx. ”通过索引读取内表中的单行数据. ASSIGNING表表示指派给字段符号.
②READ TABLE itab FROM structure [INTO wa|ASSIGNING <fs>].”
读取与结构相同的工作区中的关键词内容全部相同的内表数据.
③READ TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2 [INTO wa|ASSIGNING <fs>]. “指定所有关键词值,并读取相等时内表行.
④READ TABLE itab WITH KEY field1 = v1 ... field2 = v2 [INTO wa|ASSIGNING <fs>]. “读取内表中字段fieldn(不一定是表关键词段)与值vn相同时的内表行.
5.DELETE(删除操作)
DELETE FROM <dbtab> WHERE <condition>.
DELETE FROM <dbtab>.
DELETE <dbtab> FROM TABLE <itab>.
DELETE itab INDEX idx. “根据索引删除内表行.
DELETE TABLE itab FROM wa. “根据工作区关键词删除行.
DELETE TABLE itab WITH TABLE KEY field1 = v1 ... field2 = v2. “根据关键词删除行.
DELETE itab [FROM n1] [TO n2] [WHERE <condition>].
delete adjacent duplicates from itab 和
delete adjacent duplicates from itab comparing all fields还是有区别的:
前者相邻两行数据,如果除金额字段以外的其他字段都相同,则去重复删除其中一行;
后者相邻两行数据,如果所有对应的字段都相同(包含金额字段),则去重复删除其中一行。
COLLECT语句也有类似的功能,除了金额型字段外其他的字段内容相同,则去掉相同行并把相同行的金额值累加到留下来的一行。
DELETE FROM dbtab WHERE .
DELETE dbtab[CLIENT SPECIFIED] FROM TABLE itab.
注:返回值同MODIFY
两种形式:1).通过内表删除多行数据条目的过程中将内表置为空;2).使用WHERE FIELD LIKE ‘%‘。
删除单行:
DELETE <dbtab> [CLIENT SPECIFIED] FROM <wa>."从数据表中删除与<wa>中主键相同的行。
DELETE <dbtab> [CLIENT SPECIFIED]."从数据库删除主键与表工作区<dbtab>中指定主键相同的行。
例:
TABLES SPFLI.
DATA WA LIKE SPFLI.
WA-CARRID = ‘AA‘.
WA-CONNID = ‘0064‘
DELETE SPFLI FROM WA.
SPFLI-CARRID = ‘LH‘.
SPFLI-CONNID = ‘0017‘.
DELETE SPFLI.
删除多行语法:DELETE FROM <dbtab> [CLIENT SPECIFIED] WHERE <conditions>.
使用内表删除多行语法:
DELETE <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab>."如果已处理了内表中所有行,SY-SUBRC置为0.否则为4.如内表为空,SY-SUBRC和SY-DBCNT都为0.
例:
TABLES SPFLI.
DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
ITAB-CARRID = ‘UA‘. ITAB-CONNID = ‘0011‘.
APPEND ITAB.
ITAB-CARRID = ‘LH‘. ITAB-CONNID = ‘1245‘.
APPEND ITAB.
ITAB-CARRID = ‘AA‘. ITAB-CONNID = ‘4574‘.
APPEND ITAB.
DELETE SPFLI FROM TABLE ITAB.
原文地址:https://www.cnblogs.com/moqi222/p/11751392.html