内表操作与OPEN SQL

内表追加 – APPEND
内表插入 – INSERT
内表聚集附加 - COLLECT
内表修改 –  MODIFY
内表读取 - READ
内表排序 - SORT
内表删除 – DELETE
内表连接 - INNER JOIN
追加 – APPEND:在内表的最后追加一行,它只能使用在索引表中而且最好是标准表。而标准表是ABAP编程中最常用的表,所以这个语句很重要。
APPEND [line|INITIAL LINE] TO itab .
APPEND LINES OF itab1 [FROM n1] [TO n2] TO itab2 .
插入 – INSERT:将行插入到内表中指定的位置,需要使用INSERT 语句。
按照索引值插入(只能用于索引表)
INSERT line INTO itab INDEX idx .

按照关键字插入(可以用于所有表):哈希表不 能指定行的索引,系统会按照关键字将新行插入其特殊位置。
INSERT line INTO TABLE table .

多行插入
INSERT LINES OF itab1 [FROM n1] [TO n2]  INTO [TABLE] itab2 [INDEX idx].
聚集附加 – COLLECT
COLLECT line INTO ITAB.
修改 – MODIFY:根据索引更改内表的语法如下
*TRANSPORTING指定修改字段,表格较大时能提示效率
MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 f2 …].

使用表关键字来更改内表行可以应用于所有类型的内表,语法如下:
MODIFY TABLE itab FROM wa [TRANSPORTING f1 f2 …].   
读取 – READ

对于索引表可以利用索引读取单行
READ TABLE itab [INTO wa | ASSIGNING <FS>] INDEX idx.
可以通过关键字读取任何类型的内表
READ TABLE itab WITH [TABLE] KEY K1 = f1 … 
			       Kn = fn
	[INTO wa | ASSIGNING <FS>] INDEX idx.
使用TABLE关键字,要求指定的KEY字段必须都是关键字段,并且把所有的关键字段都列出来,是哈希表读取时比较合适的语句
不使用TABLE关键字,指定的KEY字段不必都是关键字,也无需把所有关键字段都列出来,是索引表读取时比较合适的语句

对于所索引表的读取可以使用Binary search 语句加快读取速度. Binary search 叫做二分法搜索,可以成几倍得加过搜索速度。
条件:	1. 内表必须是索引表

	2. 内表必须已经按照要搜索的关键字排序

不进行传值 - TRANSPORTING NO FIELDS 
排序
升序:ASCENDING
降序:DESCENDING
多个字段排序:SORT itab BY field1 field2 ASCENDING field3 DESCENDING

读取内表中的某一行,并修改该行
注意:
判断是否读取成功,使用sy-subrc系统变量

在修改内表内容时,需要单独指定index值(内表循环中不需要指定,默认为当前行)
删除 – DELETE
根据索引删除内表的语法如下:
DELETE itab [FROM wa] [INDEX idx].
使用表关键字来删除内表行可以应用于所有类型的内表,语法如下:
DELETE TABLE itab FROM wa .   
删除邻近的重复行
SORT itab BY field1 field2 .
DELETE ADJACENT DUPLICATES FROM itab [COMPARING field1 field2] .
从数据库表中向内表/结构中取数:SELECT
取多条数据
SELECT field1 field2 field3
  FROM database table
    INTO [CORRESPONDING FIELDS OF] TABLE itab .
从数据库表中向内表/结构中取数:SELECT
取单条数据
SELECT SINGLE field1 field2 field3
  FROM database table
    INTO [CORRESPONDING FIELDS OF] wa .
注意:SELECT是针对数据库进行的循环。如果不指定SINGLE或TABLE关键字,单次取出单条或多条数据,
则需要使用ENDSELECT表明循环,从数据库表中循环取数满足条件的数据。但该语句不满足效率原则,已被废除。
多表连接 – INNER JOIN
SELECT a~field1 a~field2 b~field3
  FROM database1 AS a INNER JOIN database2 AS b
       ON a~field1 = b~field1
    INTO CORRESPONDING FIELDS OF TABLE itab
WHERE logexp.
数据库表选取 – SELECT
数据库表插入 – INSERT
数据库表修改 – UPDATE / MODIFY
数据库表删除 – DELETE
提交至数据库 – COMMIT WORK / ROLLBACK WORK
SELECT
SELECT … INTO … 覆盖数据
数据库表循环语句
	SELECT field1 field2 field3
	    FROM database table
	      INTO [CORRESPONDING FIELDS OF] wa .
	    APPEND wa TO itab .
	ENDSELECT .
选取多条数据
	SELECT field1 field2 field3
	    FROM database table
	      INTO [CORRESPONDING FIELDS OF] TABLE itab .
选取单条
	SELECT SINGLE field1 field2 field3
	    FROM database table
	      INTO [CORRESPONDING FIELDS OF] wa .
SELECT … APPENDING … 追加数据
语法规则类似,不会覆盖内表中的数据,而是在原本的内表中追加数据
INSERT
在数据库表里插入一条记录的语句用 Insert语句,如果数据库表里已经存在了一条相同的记录,
如果从结构插入,返回值subrc为4,如果从内表插入,便会出现系统错误。
INSERT db FROM TABLE itab .
INSERT db FROM wa .
UPDATE
Update 语句只会更该数据库表里相关
记录已经存在的数据,如果记录不存在,
则出显系统错误.

UPDATE db FROM TABLE itab .
UPDATE db FROM wa .
UPDATE db SET field = val
       WHERE … .

MODIFY
Modify 语句会检查数据库表里相关的记
录是否存在,如果存在就会更改记录,如
果不存在则会在数据库里追加一条新的记录.

MODIFY db FROM TABLE itab .
MODIFY db FROM wa .
DELETE
删除主键相同的数据,如果数据库表中不存在,删除失败
DELETE db FROM TABLE itab .
DELETE db FROM wa .
DELETE FROM db WHERE field = val .
COMMIT WORK
结束一个LUW并开始一个新的LUW
触发数据库提交(依次释放数据库锁定)
清空反转日志。
反转日志包含应用更改前的表格快照。执行反转时,该快照用来将表格复位到原值
ROLLBACK WORK
撤销所有修改,返回到LUW开始状态
在更新任务队列中将所有以前请求的更新任务功能标记为错误
触发数据库反转操作(依次释放所有数据库锁定)

何时使用
通过INSERT、UPDATE和MODIFY语句对数据库进行更新事务后。
如果要保证数据库中当前所作的更改立即被确认,那么就必须使用COMMIT WORK 语句结束LUW。在COMMIT WORK 语句以后,
对数据库所作的所有更改都不能再取消。要撤销当前LUW 对数据库的更改,请使用ROLLBACK WORK,它将取消前一次数据库提交后的所有更改。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值