ABAP 数据库操作

摘要:
OpenSQL使用INSERT、UPDATE、MODIFY和DELETE语句更新数据。当SY-DBCNT返回0时,操作成功。此外,还将返回实际操作的数据行数。导入周期的原因是,当数据库更新时,不确定数据库中对应的数据行是否后悔。

Open SQL中使用INSERT、UPDATE、MODIFY和DELETE语句进行数据的更新操作,其中当SY-DBCNT返回为0,则表示操作成功,此外还 将返回实际操作的数据行数。需要指明的是Open SQL本身并不进行操作权限的检查,若需要进行设定,则要在系统中创建授权对象。

一.INSERT语句
Open SQL中的INSERT语句用于向数据库中插入新条目。
1.插入单行数据:
INSERT INTO dbtab VALUES wa.
INSERT INTO dbtab FROM wa.
wa为工作区,是与数据库具有相同结构的数据对象,一般直接基于数据库结构声明。该语句也可以将数据插入视图中,首先该视图所有字段必须来自同一个数据库表,而且在数据字典中的maintenance status属性必须设定为read and change
注:如果相同表关键字的数据条目已经存在,则不能重新插入,只能对非关键字进行更改(UPDATE,MODIFY)
2.插入多行数据
INSERT dbtab FROM TABLES itab.
其中itab是内表,包含希望插入的数据条目。
注:内表应与数据库的行结构一致。
所有条目成功插入,则SY-SUBRC返回0
使用ACCEPTING DUPLICATE可避免该错误。
INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS.
ACCEPTING DUPLICATE的效果是:若出现关键字相同,返回4,并跳过其再更新所有的其他。

二.UPDATE语句
1.更新单行数据:
UPDATE dbtab SET f1=g1 ... fn=gn WHERE <fix_key>.
f表组建字段名,g为新设定的值,WHERE为确保只更新单行。
注:除f=g外还可 f=f+g、f=f-g
通过工作区更改单行数据:
UPDATE dbtab FROM wa.
2.更新多行数据:
UPDATE dbtab SET f1=g1 ... fi=gi [WHERE <conditions>].
也可以使用SET和WHERE子句同时更新多行数据值;此外不需要在WHERE中限定所有表关键字,该语句本身将更新所有满足条件的数据条目,若不是用WHERE子句,则将更新当前数据集团中的所有数据行。
注:如果至少有一行数据被更新SY-BUBRC返回0,否则返回4。
还可通过内表来更新多行数据:
UPDATE target FROM TABLE itab.

三.MODIFY语句
MODIFY语句是SAP的Open SQL中专有语句,该语句相当于INSERT和UPDATE语句的结合。引入期的原因是当更新数据库操作时,并不确知数据库中是否遗憾相应的数据行。
1.添加或更新单行:
MODIFY dbtab FROM wa.
注:操作后SY-SUBRC恒为0;SY-DBCNT为1
2.添加或更新多行:
MODIFY dbtab FROM TABLE itab.
内表itab将覆盖数据库表中具有相同主关键字的条目。
注:SY-SUBRC恒为0;SY-DBCNT返回行数

四.DELETE语句
1.删除单行数据:
DELETE FROM dbtab WHERE <fix_key>.
或      DELETE dbtab FROM wa.
其中WHERE必须指明全部表关键字段的值;wa为工作区,若不去dbtab匹配操作将失败。
2.删除多行数据:
DELETE FROM dbtab WHERE <condition>.
DELETE dbtab[CLIENT SPECIFIED] FROM TABLE itab.
注:返回值同MODIFY
3.删除多行数据:
两种形式:1).通过内表删除多行数据条目的过程中将内表置为空;2).使用WHERE FIELD LIKE '%'。

免责声明:文章转载自《ABAP 数据库操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Visual Studio 配置额外工具 Windows Terminal 等前端模块化详解(完整版)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【原】结构体包含CString类型成员变量出错的原理

问题如下:我定义了如下的一个结构体:typedef struct{CString csText;}MyStruct;并有如下的程序段1:MyStruct * p=NULL;p=(MyStruct *)malloc(sizeof(MyStruct));if(!p)AfxMessageBox("分配内存失败!");else{p->csText="hell...

FineReport连接多维数据库示例及操作

1. 描述 FineReport连接多维数据库,首先要通过数据连接将多维数据库与FineReport连接起来,然后在数据连接的基础上新建多维数据库XMLA数据集,用于模板设计。 2.XMLA数据连接 2.1描述 多维数据库(Multi Dimensional Database,MDD),顾名思义,就是指将数据存储在多个维度中,简单来说,就是将数据存放在一个...

AMBARI部署HADOOP集群(3)

1.安装ambari-server yum -y install ambari-server 2.ambariserver需要一个数据库存储元数据,默认使用的 Postgres数据库。默认的用户名和密码是:ambari/bigdata 。但是一般情况下,后面还要安装 hive和 Ranger,也需要一个存元数据的数据库,所以使用一个mysql做为数据库。需...

MySQL集群常见高可用方案(转)

1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。 当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺...

在本地数据库目录或系统数据库目录中已经存在数据库别名""的解决办法

在创建数据库时遇到数据库别名已存在的问题时,可以: 1. 首先用 db2 list database directory 命令看在系统数据库目录(System Database Directory)中有没有该数据库,如果有,应该在确定该数据库是没有用的数据库之后用 db2 drop database 数据库名将其删除。2. 如果没有,再用 db2 lis...

微服务间如何选择推送和拉取数据

在现在的系统架构中,服务间会大量采用消息来进行通信。在消息系统中,一般有两种消费模式:生产端推送和消费端拉取。那么在什么情况下,我们采用生产端推送,什么情况下换为消费端拉取呢?今天本篇文章就针对这个话题谈谈我个人的想法,希望对大家有用。 简单来说,是由实际业务决定、包括通信间的双方系统的技术实现、双方系统的架构和性能,看日后是否此业务会经常修改等多方面决定...