Database Update

在ABAP中可以通过OPEN SQL或Native SQL两种方式来更新数据库,OPEN SQL是与数据库无关的,而且做了相关的table setting后还可以利用table buffer来提高性能。OPEN SQL没有DDL(Data Definition Language)这些工作是通过ABAP Dictionary来实现的。只有在一些跟数据库相关的一些特殊的功能不能实现时才会考虑使用Native SQL。在OPEN SQL中是用where … like …时,’_’代表一个字符,’%’代表任意长度的字符。OPEN SQL语句执行的结果会反填到系统字段sy-subrc中,0代表处理成功,其它值代表失败。Sy-dbcnt代表有多少条记录被处理了。OPEND SQL没有任何的权限检查。如果没有CLIENT SPECIFIED addition在where中就不能限制client字段,如果有了CLIENT SPECIFIED addition但是没有做client的限制,则会处理所有client的数据。可以通过语句INSERT INTO [CLIENT SPECIFIED] VALUES(FROM) 向表中插入一行。如果没有client specified addition当前的client就会被应用。也可以通过view向表中插入数据,view的maintenance status必须被设置,view的字段只能来自于一个表。当插入成功时,sy-subrc = 0否则sy-subrc = 4。可以通过语句INSERT INTO [CLIENT SPECIFIED] TABLE [itab]向表中插入多行。如果所有的记录插入成功sy-subrc = 0。当有一个记录不能被插入成功,所有的插入操作都回被放弃(database rollback),如果想让能被插入的记录更新到表中可以使用ACCEPTING DUPLICATE KEYS,如果出现错误,系统会忽略错误,并把能够插入的记录插入进去sy-subrc = 4,sy-dbcnt记录了插入的记录数。UPDATE [CLIENT SPECIFIED] FROM 用来更新表中的一条记录。UPDATE [CLIENT SPECIFIED] SET = … = WHERE 用来更新表中某条记录的几个指定字段。可以使用表中的其他字段作为表达式的一部分,如:f = g, f = f + g,f = f – g等。也可以用view来更新表与向表中插入一条记录相同。Sy-subrc为0代表更新成功,为4代表不成功。可以通过where condition来对表中的多条记录进行相同的更新操作UPDATE [CLIENT SPECIFIED] SET = … = WHERE ,更新成功sy-subrc = 0否则sy-subrc = 4,sy-dbcnt返回更新的记录数。通过UPDATE [CLIENT SPECIFIED] FROM TABLE [itab]进行批量更新。Sy-subrc = 0代表更新成功,sy-dbcnt记录更新的记录数。Sy-subrc = 4代表至少有一条记录没有更新成功。MODIFY [CLIENT SPECIFIED] FROM MODIFY [CLIENT SPECIFIED] FROM TABLE [itab]是UPDATE和INSERT的两种情况的组合。DELETE FROM [CLIENT SPECIFIED] WHERE 用来删除表中的一条记录,也可以通过view来删除。还可以通过DELETE FROM [CLIENT SPECIFIED] FROM 来删除表中的一条记录,wa中的key field在删除语句之前必须被赋值。DELETE FROM [CLIENT SPECIFIED] WHERE 可以用来删除多条记录。可以通过 DELETE FROM WHERE LIKE %来删除表中的所有记录,可以通过下面语句删除集团相关的所有集团的数据 DELETE FROM CLIENT SPECIFIED WHERE LIKE %。如果删除成功sy-subrc = 0否则sy-subrc = 4。Sy-dbcnt记录了删除的记录数。通过DELETE [CLIENT SPECIFIED] FROM TABLE 删除内表中的多条记录,这里internal table中只要为key fields赋值即可。删除成功sy-subrc = 0,有一条不成功sy-subrc = 4,sy-dbcnt记录了删除记录的个数。当OPEN SQL语句改变表中记录的值时,如果sy-subrc返回的值不为零,你需要把数据库的状态恢复到该语句执行之前的状态,可以通过database rollback来实现。有两种方式可以触发database rollback: l Sending a termination dialog message (Message A)结束了当前program l Using the ABAP statement ROLLBACK WORK并没有结束当前program
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值