*&---------------------------------------------------------------------* *& Report Z_CPT3_5 * *& * *&---------------------------------------------------------------------* *& 内表 * *& * *&---------------------------------------------------------------------* REPORT Z_CPT3_5. *标准表 DATA: begin of datarow, value(10) TYPE c, end of datarow. DATA myTable1 LIKE STANDARD TABLE OF datarow. DO 5 TIMES. datarow-value = sy-index. APPEND datarow to myTable1. ENDDO. LOOP AT myTable1 INTO datarow. WRITE: / datarow-value. ENDLOOP. CLEAR myTABLE1. *排序表 DATA:begin of employee, firstname(10) TYPE c, lastname(10) TYPE c, age TYPE i, end of employee, value(10) TYPE c, myTable2 LIKE SORTED TABLE OF employee WITH UNIQUE KEY firstname. WRITE: / '排序表'. employee-firstname = 'jim'. employee-lastname = 'green'. employee-age = '16'. INSERT employee INTO TABLE myTable2. employee-firstname = 'bob'. employee-lastname = 'li'. employee-age = '15'. INSERT employee INTO TABLE myTable2. employee-firstname = 'lucy'. employee-lastname = 'king'. employee-age = '11'. INSERT employee INTO TABLE myTable2. LOOP AT myTable2 INTO employee. WRITE: / employee-firstname, / employee-lastname, / employee-age. ENDLOOP. *哈希表 DATA:myTable3 LIKE HASHED TABLE OF employee WITH UNIQUE KEY firstname. employee-firstname = 'jim'. employee-lastname = 'green'. employee-age = '16'. INSERT employee INTO TABLE myTable3. employee-firstname = 'bob'. employee-lastname = 'li'. employee-age = '15'. INSERT employee INTO TABLE myTable3. employee-firstname = 'lucy'. employee-lastname = 'king'. employee-age = '11'. INSERT employee INTO TABLE myTable3. *标准表中的一些操作 DATA:tmpTable like myTable2 WITH HEADER LINE. *表复制操作 SKIP 3. WRITE: / '表复制'. *INSERT LINES OF myTable2 INTO tmpTABLE. 这句没用 APPEND LINES OF myTable2 TO tmpTABLE. LOOP AT tmpTABLE. WRITE: / tmpTABLE-firstname. ENDLOOP. *读单行数据 SKIP 3. WRITE: / '读取哈希表中的数据'. READ TABLE myTABLE3 WITH KEY firstname = 'jim' into employee. WRITE: / employee-firstname, / employee-lastname. SKIP 3. WRITE: / '根据索引读取排序表中的数据'. READ TABLE myTABLE2 into employee INDEX 1. WRITE: / employee-firstname, / employee-lastname. *modify内表 SKIP 3. WRITE: / 'modify内表'. employee-firstname = 'jim'. employee-lastname = 'china'. employee-age = '50'. *TRANSPORTING用来指定需要修改的字段 MODIFY TABLE myTable2 FROM employee TRANSPORTING lastname. LOOP AT myTable2 INTO employee. WRITE: / employee-firstname, / employee-lastname, / employee-age. ENDLOOP. *批量修改 SKIP 1. WRITE / 'modify批量修改数据'. employee-lastname = 'bluk modify'. MODIFY myTable2 FROM employee TRANSPORTING lastname WHERE age < 20. LOOP AT myTable2 INTO employee. WRITE: / employee-firstname, / employee-lastname, / employee-age. ENDLOOP. *删除操作 SKIP 3. WRITE: / '删除操作'. employee-firstname = 'jim'. DELETE TABLE myTable2 FROM employee. LOOP AT myTable2 INTO employee. WRITE: / employee-firstname, / employee-lastname, / employee-age. ENDLOOP. *根据条件删除记录 SKIP 1. WRITE: / '根据条件删除记录'. DELETE myTable2 WHERE firstname = 'lucy'. LOOP AT myTable2 INTO employee. WRITE: / employee-firstname, / employee-lastname, / employee-age. ENDLOOP. *LOOP循环中操纵内表 SKIP 3. WRITE: / 'LOOP循环中操纵内表'. DATA: begin of student, stuid TYPE i, name TYPE string, grade TYPE c, end of student, stu_tbl LIKE STANDARD TABLE OF student. student-stuid = 1. student-name = 'bank'. student-grade = '1'. INSERT student INTO TABLE stu_tbl. student-stuid = 2. student-name = 'jim'. student-grade = '1'. INSERT student INTO TABLE stu_tbl. student-stuid = 3. student-name = 'clark'. student-grade = '1'. INSERT student INTO TABLE stu_tbl. student-stuid = 4. student-name = 'bob'. student-grade = '2'. INSERT student INTO TABLE stu_tbl. student-stuid = 5. student-name = 'lucy'. student-grade = '3'. INSERT student INTO TABLE stu_tbl. student-stuid = 6. student-name = 'alex'. student-grade = '3'. INSERT student INTO TABLE stu_tbl. student-stuid = 7. student-name = 'tim'. student-grade = '4'. INSERT student INTO TABLE stu_tbl. student-stuid = 8. student-name = 'jack'. student-grade = '5'. INSERT student INTO TABLE stu_tbl. student-stuid = 9. student-name = 'rose'. student-grade = '4'. INSERT student INTO TABLE stu_tbl. student-stuid = 10. student-name = 'bomb'. student-grade = '2'. INSERT student INTO TABLE stu_tbl. LOOP AT stu_tbl INTO student. WRITE: / student-stuid, student-name, student-grade. ENDLOOP. SKIP 1. WRITE: / '用WHERE来控制读取数据的范围'. LOOP AT stu_tbl INTO student WHERE stuid BETWEEN 3 AND 8. *sy-tabix:获取当前记录在内表中的索引 WRITE: / student-stuid, student-name, student-grade, sy-tabix. ENDLOOP. SKIP 1. WRITE: / '排序'. *可以针对多个字段进行排序处理。 SORT stu_tbl by grade DESCENDING name ASCENDING. LOOP AT stu_tbl INTO student. WRITE: / student-stuid, student-name, student-grade. ENDLOOP. *控制级操作 -----------------------没实现 *SKIP 1. *WRITE: / '控制级操作'. *DATA tmpSum TYPE i. *LOOP AT stu_tbl INTO student. * WRITE: / student-stuid, * student-name, * student-grade. * AT level. * tmpSum = SUM. * ENDAT. *ENDLOOP. *WRITE: / 'SUM:',tmpSum. *Extract Datasets SKIP 3. WRITE: / '测试Extract Datasets'. DATA: f1 TYPE i,f2 TYPE i,f3 TYPE i. FIELD-GROUPS header. INSERT f1 f2 INTO header. DO 10 TIMES. f1 = sy-index. f2 = sy-index ** 2. EXTRACT header. ENDDO. SORT DESCENDING. LOOP. WRITE: / f1,f2,f3. ENDLOOP.