关于获取数据
-
FOR ALL ENTRIES IN
-
READ
READ TABLE itbl_xxx INTO wa_xxx WITH KEY '2'.
READ TABLE itbl_xxx INTO wa_xxx WITH KEY = 25.
前者是读取带关键字2的单行,后者是读取值为25的单行
READ只能读取单行,如果有多行则只匹配第一个条目(疑问)
写法例子:
READ TABLE itbl_xxx INTO wa_xxx WITH KEY COL3 = 9 COL4 = 36.
READ TABLE git_event INTO gwa_event
WITH KEY name = slis_ev_top_of_page.
注意:尽量使用BINARY SEARCH,并在READ前排序。二分法查找前必须排序。、
若找到则返回sy-subrc = 0.可以通过判断sy-subrc = 0来进行后续操作
IF sy-subrc = 0.
gwa_event-form = 'ALV_TOP_OF_PAGE'.
MODIFY git_event INDEX sy-tabix FROM gwa_event.
ENDIF.
-
MODIFY
以上面的READ中的MODIFY语句为例,
IF sy-subrc = 0.
gwa_event-form = 'ALV_TOP_OF_PAGE'.
MODIFY git_event INDEX sy-tabix FROM gwa_event.
ENDIF.
注意:
MODIFY可以更新数据库或内表
当MODIFY用于更新内表时,有两种情况:
①在LOOP内:MODIFY作用于更新当前行
②在READ后:要加索引
-
WHERE skat~spras = sy-langu
sy-langu是登陆语言。
skat~spras = sy-langu是查询时按自己的登陆语言进行查询。
多用于取描述的时候添加的查询条件,因为描述字段可能会维护多个语种。
所以还得写在WHERE语句的第一条。
关于内表与工作区的定义
-
内表后跟的中括号是什么?
// 判断内表是否不为空的一般写法是
IF itab[] IS NOT INITIAL.
ENDIF.
// 少了中括号就变成判断内表表头是否为空,如果该内表恰好没有表头,那么永远为空。
由此可见,内表加了中括号代表不含表头的表内容,不加只会判断表头是否为空。
-
OCCURS 0
ABAP编程中对内表的定义,后面接一个OCCURS (n)是代表什么意思。
例子:
DATA: BEGIN OF itab OCCURS 0,
matnr LIKE mara-matnr,
maktx LIKE makt-maktx,
END OF itab.
SELECT *
FROM makt
INTO CORRESPONDING FIELDS OF TABLE itab.
LOOP AT itab.
WRITE:/
itab-matnr,
itab-maktx.
END LOOP.
由此可见,带OCCURS的结构不仅有wa原有的输出显示功能,还有it内表的存储功能,可以不用写DATA it_itab LIKE TABLE OF itab.了
-
WITH HEADER LINE
例子:
DATA itab1 TYPE TABLE OF char10.
DATA itab2 TYPE TABLE OF char10 WITH HEADER LINE.
Itab1是一个内表
Itab2既是一个内表,又是一个与该内表结构相同的工作区
因为容易混淆,尽量别用,推荐分开建内表和工作区。
-
SELECT XXX INTO CORRESPONDING FIELDS OF TABLE YYY
如果SELECT后面的字段比into table后面的字段多,程序运行的时候就会Dump掉,这时候你需要用SELECT XXX INTO CORRESPONDING FIELDS OF TABLE YYY。但是这时候你需要select后面的字段名要与table后面的内表中的字段名一一对应。如果用这个语法,字段名不对应的就没有值。
如果SELECT后的字段与into table的内表中的字段数量一样,且table中的字段类型与数据库表中的一样,用select XX into table YYY的时候不会Dump,但字段类型的顺序要一样。
例如:
DATA: BEGIN OF wa_a,
bname TYPE xubname,
spdb TYPE xuspdb,
col TYPE xuspda,
END OF wa_a,
it_a LIKE TABLE OF wa_a.
SELECT bname
spdb
spda
FROM usr
INTO TABLE it_a.
这样可以取到个字段的值
DATA: BEGIN OF wa_a,
bname TYPE xubname,
spdb TYPE xuspdb,
col TYPE xuspda,
END OF wa_a,
it_a LIKE TABLE OF wa_a.
SELECT bname
spdb
spda
FROM usr
INTO CORRESPONDING FIELDS OF TABLE it_a.
这样可以取到前两个字段的值
DATA: BEGIN OF wa_a,
bname TYPE xubname,
spdb TYPE xuspdb,
END OF wa_a,
it_a LIKE TABLE OF wa_a.
SELECT bname
spdb
spda
FROM usr
INTO TABLE it_a.
这样程序就会Dump
网友评论