abap 内表的DELETE , READ, SELETE

来源:互联网 发布:lightroom mac版百度云 编辑:程序博客网 时间:2024/05/21 15:26


一.删除重复行:(要先排序后删除,才可以删除完全)

SORT itabBY field1  field2.默认是升序,降序-DESCENDING.

DELETE ADJACENT DUPLICATES FROM xxx COMPARING ALL FIELDS.

 

DELETE IT_Z_ACCT WHERE Z_DESC_CHN '固定资产净值:' OR Z_DESC_CHN =
'固定资产净额:' OR Z_DESC_CHN =  '应交税费'.

  SORT IT_Z_ACCT BY Z_X_FROM Z_X_TO Z_DESC_CHN DESCENDING.
  DELETE ADJACENT DUPLICATES FROM IT_Z_ACCT  COMPARING  Z_X_FROM  Z_X_TO .

二.选择 selete

SELECT field1 foeld2 field3  INTO CORRESPONDING FIELDS OF TABLE itab FROM  setleaf  WHERE 条件1 and 条件2 and 条件4.

SELECT field1 foeld2 field3INTOCORRESPONDINGFIELDS OF TABLE itabFROM setleaf FOR ALL ENTRIES IN it_gr_info  WHERE 条件1 and 条件2 and 条件4.

三.read table 需要注意的

1.  如果使用READ TABLE语句来读取内部表数据,而不是简单看返回值判断是否存在,那么在使用READ TABLE语句之前,一定要记得使用CLEAR语句清空内部表的工作区。

例子:

a. "Get begining balance.
      CLEARlv_gl_s,lv_gl_h.
      READ TABLE it_gl_result INTO lv_gl_s   WITH KEY  racct <fs_gl>-racct drcrk 'S' BINARY SEARCH.
      READ TABLE it_gl_result INTO lv_gl_h WITH KEY  racct <fs_gl>-racct drcrk 'H' BINARY SEARCH.

 b.   READ TABLE lt_asset_info INTO ls_asset_info index lv_last_line.


2.  READ TABLE itab WITH KEY /index  字段= lv  BINARY SEARCH.

  使用READ TABLE语句的二分法搜索以 代替标准顺 序搜索时, 必须首先按关键字中指定的次序对内表进行排序。如果系统找到匹配指定关键字的多行,则读取索引最低的行。二分法搜索 比线性搜索要快。因此,应尽可能将内表排序并且使用二分法搜索。如果找到有匹配关键字的条目,则将系统字段 SY-SUBRC 设置为0并且 SY-TABIX 包含该行的索引。否则,将 SY-SUBRC 设置为非零。

3.  WITH KEY 中的检索条件比较符不能使用‘<>’(不等于)。

  如果只想取得内部表中不等于某条件的一条记录,那么请使用下面变通方法。
       LOOP AT itab WHERE KEY <> ‘XX’.
          此处取得第一条记录。
          EXIT.
       ENDLOOP.

   如果在运行时 <KEY> 值为空,则 统忽略该关键字段。另外可对关键字段指定偏移量和长度。

0 0
原创粉丝点击