1、使用CONCATENATE进行字符串拼接(i型和c型不能拼)
2、使用&&进行字符串拼接
3、MODIFY-TRANSPORTING
4、模糊查询
*&---------------------------------------------------------------------*
*& REPORT Z_09_SELECTMARA
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_09_SELECTMARA.
*DATA: BEGIN OF LS_MARA,
* MATNR LIKE MARA-MATNR,
* MAKTX LIKE MAKT-MAKTX,
* TEXT(80) TYPE C,
* END OF LS_MARA.
*DATA: LT_MARA LIKE TABLE OF LS_MARA.
*
*DATA LV_DATE LIKE SY-DATUM.
*LV_DATE = SY-DATUM - 300.
*
*SELECT
* A~MATNR
* B~MAKTX
* FROM MARA AS A
* LEFT JOIN MAKT AS B
* ON A~MATNR = B~MATNR
* INTO CORRESPONDING FIELDS OF TABLE LT_MARA
* WHERE A~ERSDA < LV_DATE
* AND A~MATNR LIKE 'RCT%' OR A~MATNR LIKE 'FP%'.
*
*
*LOOP AT LT_MARA INTO LS_MARA.
* WRITE: / 'MARA=',LS_MARA-MATNR,
* 'MAKT=',LS_MARA-MAKTX,
* 'TEXT=',LS_MARA-TEXT.
*ENDLOOP.
*自定义结构类型
TYPES: BEGIN OF TY_ITAB,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
TEXT(80) TYPE C,
END OF TY_ITAB.
*定义工作区
DATA LW_ITAB TYPE TY_ITAB.
*使用自定义类型来定义表
DATA LT_ITAB LIKE TABLE OF LW_ITAB.
*定义一个时间变量
DATA LV_DATE LIKE SY-DATUM.
*给时间变量赋值
LV_DATE = SY-DATUM - 300.
*字符串拼接的变量声明
DATA: STR1(10) TYPE C VALUE '当前是第',
STR2(10) TYPE C,
STR3(10) TYPE C VALUE '行'.
*查询
SELECT
A~MATNR
B~MAKTX
FROM MARA AS A
LEFT OUTER JOIN MAKT AS B
ON A~MATNR = B~MATNR
INTO CORRESPONDING FIELDS OF TABLE LT_ITAB
WHERE A~ERSDA > LV_DATE
AND A~MATNR LIKE 'FP%'
OR A~MATNR LIKE 'RCT%'.
* AND B~SPRAS = SY-LANGU.
**查询 UP TO * ROWS
*SELECT
* A~MATNR
* B~MAKTX
* FROM MARA AS A
* LEFT OUTER JOIN MAKT AS B
* ON A~MATNR = B~MATNR
* INTO CORRESPONDING FIELDS OF TABLE LT_ITAB
* UP TO 5 ROWS
* WHERE A~ERSDA > LV_DATE
* AND A~MATNR LIKE 'FP%'
* OR A~MATNR LIKE 'RCT%'
* .
*循环,给内表的TEXT赋值 使用CONCATENATE进行字符串拼接(i型和c型不能拼)
LOOP AT LT_ITAB INTO LW_ITAB.
STR2 = SY-TABIX.
CONCATENATE STR1 STR2 STR3 INTO LW_ITAB-TEXT.
* LW_ITAB-TEXT = '当前是第' && SY-TABIX && '行'.
MODIFY LT_ITAB FROM LW_ITAB.
ENDLOOP.
**循环,给内表的TEXT赋值 使用&&进行字符串拼接 MODIFY-TRANSPORTING
*LOOP AT LT_ITAB INTO LW_ITAB.
* LW_ITAB-MATNR = '111'.
* LW_ITAB-TEXT = '当前是第' && SY-TABIX && '行'.
* MODIFY LT_ITAB FROM LW_ITAB TRANSPORTING TEXT.
*ENDLOOP.
**循环,给内表的text赋值 通过指针FIELD-SYMBOLS
*FIELD-SYMBOLS: <F1> LIKE LINE OF LT-ITAB.
*给内表插入抬头描述在第一行
LW_ITAB-MATNR = 'MATNR'.
LW_ITAB-MAKTX = 'MAKTX'.
LW_ITAB-TEXT = 'TEXT'.
INSERT LW_ITAB INTO LT_ITAB INDEX 1.
*排序 降序
*SORT LT_ITAB DESCENDING BY TEXT.
*循环输出 FROM 1 TO 5输出前五行
LOOP AT LT_ITAB INTO LW_ITAB FROM 1 TO 5.
WRITE: / LW_ITAB-MATNR,
LW_ITAB-MAKTX,
LW_ITAB-TEXT.
ENDLOOP.
**循环输出 EXIT
*LOOP AT LT_ITAB INTO LW_ITAB.
* WRITE: / LW_ITAB-MATNR,
* LW_ITAB-MAKTX,
* LW_ITAB-TEXT.
* IF SY-TABIX = 5.
* EXIT.
* ENDIF.
*ENDLOOP.
**循环输出 CHECK
*LOOP AT LT_ITAB INTO LW_ITAB.
* WRITE: / 'CHECK BEFORE'.
**CHECK 为true执行后面的语句,为false不执行
* CHECK SY-TABIX <= 5.
* WRITE: / LW_ITAB-MATNR,
* LW_ITAB-MAKTX,
* LW_ITAB-TEXT.
* WRITE: / 'CHECK AFTER'.
*ENDLOOP.