ABAP 对内表的操作(增删改读及alv双击读取数据)


对内表操作:  gt开头为内表(gt_zav,gt_S001),wa开头为工作区(wa_zav,wa_S001)

*修改
*MODIFY TABLE gt_zav FROM wa_zav. "修改整行
*MODIFY TABLE gt_zav FROM wa_zav TRANSPORTING carrid. "修改某行的一字段
*MODIFY gt_S001 FROM wa_S001 INDEX 1. "根据下标修改整行
*MODIFY gt_S001 FROM wa_S001 INDEX 1 TRANSPORTING spmon. "根据下标修改一行某个字段
*MODIFY gt_S001 FROM wa_S001 TRANSPORTING spmon WHERE spmon = '199701'. "根据条件修改多行符合条件的


*删除
*DELETE TABLE gt_zav from wa_zav. "删除一条
*DELETE gt_zav WHERE carrid = '1'. "根据条件删除多条
*DELETE gt_zav FROM 5 TO 10. "删除5到10
*DELETE gt_zav FROM 5. "除5以后的
*DELETE gt_zav TO 10. "除开始到第十条的


*插入 (如果带表头的表,或者内表和工作区同名,这可以用隐式插入,不需要什么工作区INTO到什么表)
*Append xx "带表头 插入到表最后一行
*APPEND 工作区 into 内表 "不带表头 插入到表最后一行
*APPEND LINES OF gt_S002 TO gt_S001. "将gt_S002表所有数据插入gt_S001表的表尾巴
*APPEND LINES OF gt_S002 FROM 2 TO 4 TO gt_S001. "将gt_S002表的2到4行插入gt_S001表的表尾巴
*COLLECT wa_S001 INTO gt_S001. "所有字段不同插入表尾,所有字段相同,只有数值字段不同则数字字段汇总,变为一条数据
*INSERT wa_S001 INTO TABLE gt_S001. "插入一条到表尾
*INSERT wa_S001 INTO gt_S001 INDEX 3 . "插入一条数据至下标行
*INSERT LINES OF gt_S002 INTO TABLE gt_S001. "将gt_S002表所有数据插入gt_S001表的表尾巴
*INSERT LINES OF gt_S002 FROM 2 TO 4 INTO TABLE gt_S001. "将gt_S002表的2到4行插入gt_S001表的表尾巴
*注:使用INSERT时,如果表内已存在唯一主键,则sy-subrc会返回4,但不会dump error,反之sy-subrc会返回0


*读取 (读取内表数据 read是根据key去整个表里查,所以 read得表不用在循环了;带表头和工作区与表名一致的可以省略into后语句,读取成功sy-subrc返回0,否则返回4)
*读取内表
READ TABLE gt_S001 INTO wa_S001 WITH KEY matnr = 'PC_SERVICE_A'. "读取内表符合条件的字段入工作区,如果有多条,取内表符合的第一条sy-subrc返回0
READ TABLE gt_S001 FROM wa_S001 INTO wa_S001. "读取内表符合条件的字段入工作区,如果有多条,则取不到值sy-subrc返回4
READ TABLE gt_S001 INTO wa_S001 INDEX 1. "读取内表下标为x的放入工作区
READ TABLE gt_S001 WITH TABLE KEY 字段 = 'xxxx' 字段 ='xxx' INTO wa_S001. "这必须key的键值条件写全,否则报错缺少表xx的键值primary_key的组件 字段说明..
READ TABLE 内表 INTO 工作区
*备注:


*读取alv双击的下标行数据放入工作区 (注:rs_selfield TYPE slis_selfield.)
READ TABLE 内表 INTO DATA(工作区) INDEX rs_selfield-tabindex
*获取点击的字段的值
rs_selfield-fieldname