open sql 更新数据
insert语句:
1.插入单行数据有两种方法:wa是一个工作区
insert into dbtab values wa.
insert into dbtab from wa.
该语句也可以将数据行插入到视图,但是限制是:该视图所有字段必须来自同一个数据库表,而且在数据字典中属性必须设定为可读取及修改read and change,其他数据更新语句也必须遵循该原则。
insert语句操作后,如果相同表中关键字的数据条目已经存在,不能重新插入,只能对该行的非关键字段值进行更改(也可以使用update或者modify)
2.插入多行数据
insert dbtab from table itab. itab是一个内表,该内表的结构和数据库表的结构一致
如果所有的数据条目均成功插入,则SY-SUBRC=0,如果至少一行数据不能被插入(具有相同表关键字段的值已经存在),则触发运行时错误,而且系统不更新任何数据,使用下列格式可以避免该错误的出现:
insert dbtab from table itab accepting duplicate keys.如果出现关键字相同的条目,系统将SY-subrc=4并跳过该条目,并更新所有其他条目。
UPDATE语句:
1.更新单行数据
update dbtab set f1 = g1 .... f10 = g10 where <fix_key>
update更新的只能是非关键字段,where条件必须是关键字段,为了只更新单行,必须指明所有关键字段的值.
在set语句中,对于数值字段,除f = g外,还可以使用f = f+g、f=f-g两种形式在该字段原有基础上增减
2.更新多行数据
update dbtab set f1 = g1 ..... f10 = g10 where <conditions>.
因为是更新多行数据,所以此处就不需要在where中限定所有表关键字段,该语句本身将更新所有满足条件的数据条目,而不是根据关键字段更新一个数据条目,如果不使用where子句,则将更新当前数据集团中的所有数据行。如果至少有一行数据被更新,SY-subrc返回0,否则返回4.
还可以根据内表来更新多行数据:
update target from table itab.该语句相当于通过工作区的集合来更改数据表,对于每一个内表行,都根据关键字段定位数据表条目,并更改其他字段值,如果所有内表行更新表数据成功,sy-subrc返回0,如果某一行数据没有成功更新(与该关键字段值相同的条目不存在)则返回4.
MODIFY语句:
modify语句是SAP的open sql中专有语句(标准sql语句一般不包含该语句),该语句相当于insert和update语句结合,当使用modify语句操作数据库时,如果程序中指定的数据行已经存在于数据库中(根据表关键字判断)则对其进行更新操作,如果尚存在,则进行插入操作。
引用modify语句的原因在于,有时在进行数据库更新操作时,并不确定数据库中是否已经含有想要的数据行,单insert和update语句要求在操作之前需要首先明确具有相同主关键字段值的数据是否在数据表中已经存在,如果不存在就进行字段update操作,或者对已经存在的数据进行insert操作,都会导致无意义的结果,通过modify,可以让系统辅助程序员进行判断适当的操作.
但是出于性能的考虑,一般情况下只有需有时,才使用modify语句替代update和insert语句。
1.添加或更新单行
modify dbtab from wa.
该语句将工作区wa中的数据内容写入到数据库表中,如果在工作区中指定的主关键字行在数据库表中不存在,则将添加到数据库表中,同用insert语句插入单行所述,如果工作区中指定的主关键字行在数据库表中已经存在,则更改数据库表中相应的行,同update语句更改单行中所述,操作后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>.在where子句中必须指明全部表关键字段的值或者使用语句:delete dbtab from wa.
2.删除多行数据
删除单行数据可以通过where子句进行:
delete from dbtab where <condition>.
该语句将从数据库表中删除所有符合条件的条目,需要注意的是检查内表不要使之为空,因为该操作时无意义的,不会删除任何数据条目,在该操作后,SY-DBCNT中将返回删除行的数目,如果至少删除一行,sy-subrc返回0,如果没有删除任何行,sy-subrc返回4.
通过内表从数据库表中删除多行的语法如下:
delete dbtab [client specified] from table itab.
示例:delete spfili from table it_spfli.如果删除了内表中的所有行,sy-subrc = 0 ,否则返回4,sy-dbcnt返回实际已删除的行数,如果内表为空则sy-subrc和sy-dbcnt都返回0.
3.删除所有数据
如果希望删除所有行可以通过下述两种形式之一的实现:
在通过内表删除多行数据条目的过程中将内表置为空。
使用where field like‘%’ 作为where子句中的唯一条件。
open sql 更新数据的更多相关文章
- hibernate通过SQL更新数据
@Resource(name = "hibernateTemplate") public HibernateTemplate hibernateTemplate; /** * @T ...
- 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
[转]PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理 只要有人用了: select t.* from ...
- sql server主动推送客户端更新数据
小谈需求: 最近工作上接到一个需求,做一个web展示数据的报表,最好能实时更新,不限制所用技术. 第一个问题:web服务器推送给浏览器新数据,一开始我想到的最快的最简单的方法就是 在web页面上js轮 ...
- 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)
常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...
- SQL批量更新数据
SQL批量更新数据 step1:导入Excel数据, 具体见百度.注意点:一列中含有float型数据和文本数据的时候,导入要将Excel中的表格属性改成文本,或在数字项目前加个单引号. step2 ...
- 【SQL模板】三.插入/更新 数据模板TSQL
---Name: 插入/更新 数据模板.sql ---Purpose: 用于更新 数据库中 历史数据 或 插入 新数据 的脚本模板 ---Author: xx ---Time: 2015-12-18 ...
- SQL Server ->> DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异
之前对于“DISABLE索引后插入更新数据再REBUILD索引 和 保留索引直接插入更新数据的性能差异”这两种方法一直认为其实应该差不多,因为无论如何索引最后都需要被维护,只不过是个时间顺序先后的问题 ...
- SQL中使用UPDATE更新数据时一定要记得WHERE子句
我们在使用 SQL 中的 UPDATE 更新数据时,一般都不会更新表中的左右数据,所以我们更新的数据的 SQL 语句中会带有 WHERE 子句,如果没有WHERE子句,就回更新表中所有的数据,在 my ...
- SQL Server通过创建临时表遍历更新数据
前言: 前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据.(线上数据库用是SQL Server20 ...
随机推荐
- CMAKE的使用
CMAKE的使用 Version 1.0 2009-3-18 一. 基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make ins ...
- ZOJ 3607贪心算法
http://blog.csdn.net/ffq5050139/article/details/7832991 http://blog.watashi.ws/1944/the-8th-zjpcpc/ ...
- javascript笔记整理(事件)
一.事件驱动 1.事件javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源引发事件的元素(发生在谁的身上) 3.事件处理程序对事件处理的程序或是函数 (发生了什么事) 二 ...
- Bertelsmann Asia Investments, 简称BAI
聚焦龙宇:贝塔斯曼的中国风险投资之路 _财经_腾讯网 贝塔斯曼亚洲投资基金(Bertelsmann Asia Investments, 简称BAI )
- 解决yum升级的问题“There was a problem importing one of the Python modules”
yum命令升级的时候,报出这个错误. There was a problem importing one of the Python modules required to run yum. The ...
- linux命令: tree的c实现
tree命令的c语言实现. #include<stdio.h> #include<dirent.h> #include<sys/stat.h> #include&l ...
- BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )
对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...
- 使用 jackson序列格式化日期
[1]自定义时间,序列化类 [java] view plaincopy package com.fsti.bm.utils; import java.io.IOException; import ja ...
- display:inline-block的运用
在实习中做专题时,遇到的一个问题:建立一个宽度很长的一个页面,里面包含许多列.或许许多人认为直接设置float:left:不就行了 但是这个有一个问题,你必须把外面的div的宽度设置的很长已满足大于所 ...
- 【学习opencv第六篇】图像的反转操作
考试终于完了,现在终于有时间可以继续学习这个了.写这篇博客主要是因为以前一直搞不清楚图像数据到底是怎么存储的,以及这个step到底是什么,后来查了一下才知道原来step就是数据行的长度.. #incl ...