数据 更新 插入 删除

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语句的结合。引入期的原因是当更新数据库操作时,并不确知数据库中是否遗憾相应的数据行。

扫描二维码关注公众号,回复: 7662855 查看本文章

①.修改内表的一行 

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.

猜你喜欢

转载自www.cnblogs.com/moqi222/p/11751392.html