open sql
增删改查
单笔增: insert into DB value gs_tab
多笔新增: insert DB from table gt_tab
增加后可以用if sy-subrc = o.来判断是否插入成功
messag '成功' type ‘S’
endif
写完增加数据库语句后有两个机制可以写一下 commit work 表示确定 rollback work 表示回滚
往数据库表中插入数据的时候,通过SE38用open sql插入时 插入同一种数据 会报错 要确保原来的数据库中没有目前增加的同一记录
修改记录:modify update
modify DB from table gt_tab通过内表批量修改记录
modify DB fron gs_tab 通过工作区单笔更新记录
modify有个特点是如果修改的记录在原来数据库表中不存在那么它就会插入该记录
update DB set math = 80 where name = ‘XM3’。
update使用必须要使用where语句,不适用会更新所有数据
删除记录:
delete DB 清空整个数据库
delete DB from gs_tab 单笔清空
delete DB from table gt_tab 多笔清空
if sy-subrc = 0.
commit work (确认一下对数据库的操作)
else.
rollback work.(取消对数据库的操作)
查询:
select 字段 from DB into table 内表(多笔记录)
select 字段 from DB into 工作区(单笔记录)
select * from DB into table gt_tab where name = 'XXX'
单笔查询记录:
select.......end select 这是一种循环到工作区域的语法
select name math from DB into correspoding fields of table gt_tab. (会根据字段自动匹对到内表中)
DB中的字段名和内表中的字段不一样时要用AS取别名的方式取数据
select * from DB into table gt_tab up to 30 rows.取出前30笔记录
select * from DB into table gt_tab package size 3 . 在DB中分3次取数据并且取完,但是这个循环取值要在后面加上end select这两种大部分在项目中用不到
排序分组一般不推荐用,因为都是在DB中操作的,推荐把数据取出来在内表中再操作
写where条件的时候可以写多个,如果是且的关系用and连接,如果是或的关系用or连接,在筛选的时候是根据先从后往前筛选的,那么以后我们写的时候要把大方向写在后面。
逻辑删只是打个标记,不是真正的删除,是可以用于追溯数据
单数框用"=" 范围的话用 in 注意in后面接的是一个范围
select name from DB append table gt_tab 这种方式是给内表后面再加新区的记录。
关联表:
inner join 内连接 取出相同的数据 left join 左连接
还有就是 for all entries in 内表
select * from DB into table gt_tab2 gt_tab for all entries in gt_tab where name = gt_tab-name 意思就是用gt_tab中某个字段作为条件去取数据,在这条命令中我们称gt_tab为驱动内表,一般我们使用前先要对该表判断是否为空,如果为空的话那么该语句会对数据库表进行全表扫描.
where 最好按主键去取数据 如果索引里有多个字段的话 那么where也要按照索引字段的顺序去取数据
使用for all entries in 时 对于最后得到的记录系统会自动删除重复行,因此如果你要得到保留重复行记录时,记得在select语句中添加足够的键值项目(有必要时增加全部的键值项目不会被删除)