ABAP学习练习 变量的创建及内表的操作

来源:互联网 发布:商品抢购软件 编辑:程序博客网 时间:2024/06/06 03:53

*&---------------------------------------------------------------------**& Report  ZWXS_HTKJ_TEST_01*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  ZWXS_HTKJ_TEST_01 MESSAGE-ID ZWXS_MESSAGE .WRITE 'hello' .MESSAGE S000 .* 数据类型*  变量* 创建变量 参照标准类型DATA GV_CHAR TYPE C LENGTH 10 VALUE 'CHAR类型'.   "参考标准类型声明变量,DATA GV_NUMC TYPE N LENGTH 10 VALUE '123' .DATA GV_DEC  TYPE P LENGTH 10 DECIMALS 2 VALUE '3.14' .DATA GV_INT  TYPE I VALUE 10 .DATA GV_DATE1 TYPE D VALUE '20171121' .DATA GV_DATE2 TYPE D VALUE '19940705' .DATA GV_DATE3 LIKE GV_DATE2 .   "参考对象创建对象DATA GV_TIME1 TYPE T VALUE '151901' .DATA GV_TIME2 TYPE T VALUE '180000' .WRITE : / 'CHAR类型:' NO-GAP, GV_CHAR ,       / '数值类型:' NO-GAP,GV_NUMC NO-ZERO,  "去掉前导零       / '小数类型:' NO-GAP ,GV_DEC .GV_INT = GV_DATE1 - GV_DATE2 .    "日期相减WRITE : / '日期相减:', GV_INT .GV_DEC = GV_TIME1 - GV_TIME2 .WRITE : / '时间相减;' , GV_DEC .  "时间相减WRITE : / GV_DATE1+0(4) . "截取字符 第0位开始截取4位WRITE : / GV_DATE2+4(*) .  "第4位开始 ,截取所有* 赋值GV_DATE1 = GV_DATE2 .MOVE GV_DATE2 TO GV_DATE1 .WRITE GV_DATE2 TO GV_DATE1 .  "WRITE辅助不能是 I 类型 和 P 类型WRITE / GV_DATE1 .* 创建变量  参照全局类型  即数据字典中创建的类型DATA GV_SEX TYPE ZSTUSEX .  " 参考 data elementGV_SEX = '男' .write  / gv_sex .DATA GV_WEIGHT TYPE ZSTUDENT_WXS-ZSTUWEIGH . " 参考字段创建变量GV_WEIGHT = '60' .WRITE / GV_WEIGHT .* 在程序中声明局部类型TYPES GTY_CHAR01 TYPE C LENGTH 20 .DATA GV_CHAR01 TYPE GTY_CHAR01 VALUE '参考局部类型创建变量' .WRITE / GV_CHAR01 .* 参考结构体类型 创建结构体变量DATA GS_SCHOOL TYPE ZSCHOOL_WXS_STR_01 .   " 参考全局类型的结构体 创建变量GS_SCHOOL-ZSCHOOL = '101' .GS_SCHOOL-ZSNAME = '清华大学' .GS_SCHOOL-ZADD = '北京 中国'  .WRITE : / GS_SCHOOL .WRITE : / GS_SCHOOL-ZSCHOOL , GS_SCHOOL-ZSNAME , GS_SCHOOL-ZADD .DATA GS_SCHOOL2 TYPE ZSCHOOL_WXS_STR_01 .MOVE-CORRESPONDING GS_SCHOOL TO GS_SCHOOL2 .   "对应赋值WRITE: / GS_SCHOOL2-ZSCHOOL , GS_SCHOOL2-ZSNAME , GS_SCHOOL2-ZADD .* 结构体* 在程序中声明结构体类型TYPES : BEGIN OF  GTY_SCHOOL3_S ,          ZSCHOOL TYPE ZSCHOOL_WXS_TEST-ZSCHOOL ,          ZSNAME TYPE ZSCHOOL_WXS_TEST-ZSNAME ,          ZADD TYPE ZSCHOOL_WXS_TEST-ZADD ,        END OF GTY_SCHOOL3_S .DATA GS_SCHOOL3 TYPE GTY_SCHOOL3_S .GS_SCHOOL3-ZSCHOOL = '102' .GS_SCHOOL3-ZSNAME = '北京大学'.GS_SCHOOL3-ZADD = '北京 中国' .WRITE : / GS_SCHOOL3-ZSCHOOL ,  GS_SCHOOL3-ZSNAME , GS_SCHOOL3-ZADD .MOVE-CORRESPONDING GS_SCHOOL TO GS_SCHOOL3 .WRITE : / GS_SCHOOL3 .TYPES BEGIN OF GTY_SCHOOL_A .    "结构体中 INCLUDE STRUCTURE 结构体 ,平级关系        INCLUDE STRUCTURE ZSCHOOL_WXS_STR_01 .TYPES FLAG  TYPE C LENGTH 1 .TYPES  END OF GTY_SCHOOL_A .TYPES : BEGIN OF GTY_SCHOOL_B .        INCLUDE STRUCTURE ZSCHOOL_WXS_STR_01 .TYPES:    FLAG  TYPE C LENGTH 1 ,       END OF GTY_SCHOOL_B .DATA : BEGIN OF  GTY_SCHOOL3_C ,          ZSCHOOL TYPE ZSCHOOL_WXS_TEST-ZSCHOOL ,          ZSNAME TYPE ZSCHOOL_WXS_TEST-ZSNAME ,          ZADD TYPE ZSCHOOL_WXS_TEST-ZADD ,        END OF GTY_SCHOOL3_C .TABLES BSEG .  " 声明一个跟数据库表完全相同的结构体类型DATA GT_BSEG TYPE TABLE OF BSEG  .   "参照该结构体类型声明 内表对象*内表  INTERNAL TABLETYPES GTY_SCHOOL_T TYPE TABLE OF ZSCHOOL_WXS_STR_01 . "参照结构体声明内表类型TYPES GTY_SCHOOL_T2 TYPE ZSCHOOL_WXS_TTY_01 .    "参照数据字典 TABLE TYPE 声明内表类型DATA GT_SCHOOL TYPE GTY_SCHOOL_T .DATA GT_SCHOOL_1 TYPE TABLE OF GTY_SCHOOL3_S INITIAL SIZE 0 .DATA : BEGIN OF  GT_SCHOOL3_C OCCURS 0 ,      "声明的内表 默认带有表头行          ZSCHOOL TYPE ZSCHOOL_WXS_TEST-ZSCHOOL ,          ZSNAME TYPE ZSCHOOL_WXS_TEST-ZSNAME ,          ZADD TYPE ZSCHOOL_WXS_TEST-ZADD ,        END OF GT_SCHOOL3_C .* 对内表的操作GS_SCHOOL-ZSCHOOL = '103' .GS_SCHOOL-ZSNAME = '复旦大学' .GS_SCHOOL-ZADD = '浙江 中国'  .APPEND GS_SCHOOL TO GT_SCHOOL .GS_SCHOOL-ZSCHOOL = '104' .GS_SCHOOL-ZSNAME = '西安交通大学' .GS_SCHOOL-ZADD = '西安 陕西  中国'  .APPEND GS_SCHOOL TO GT_SCHOOL .DATA GT_SCHOOL_4 TYPE TABLE OF ZSCHOOL_WXS_STR_01 WITH HEADER LINE .  "参照 结构体类型 声明的 就有表头行的内表对象CLEAR GT_SCHOOL_4 .GT_SCHOOL_4-ZSCHOOL = '105' .GT_SCHOOL_4-ZSNAME = '106' .APPEND GT_SCHOOL_4 .DATA GS_SCHOOL_5 LIKE LINE OF GT_SCHOOL_4 .     "参照内表声明结构体* 常量CONSTANTS C_CHAR TYPE C LENGTH 10 VALUE '这是个常量'  .WRITE / C_CHAR .* 系统定义的数据对象IF SY-SUBRC = 0 . "返回当前代码执行状态  , 0 success .ENDIF .WRITE : / SY-TCODE ,    "返回当前 TCODE .        / SY-DATUM ,    "返回当前 日期  .        / SY-UZEIT ,    "返回当前 时间  .        / SY-COLNO ,    "返回当前列表中的列        / SY-LINNO  .    "返回当前行* 内表的相关操作* 内表的类型DATA GT_SCHOOL_STANDARD TYPE STANDARD TABLE OF ZSCHOOL_WXS_STR_01 .   "标准表DATA GT_SCHOOL_SORTED TYPE SORTED TABLE OF ZSCHOOL_WXS_STR_01 WITH UNIQUE KEY  ZSCHOOL ZSNAME . " 排序表 ,按照关键字排序 ,关键字可以是多个也可以是一个, 关键字唯一DATA GT_SCHOOL_SORTED2 TYPE SORTED TABLE OF ZSCHOOL_WXS_STR_01 WITH NON-UNIQUE KEY ZSCHOOL .    "关键字 不唯一DATA GT_SCHOOL_HASHED TYPE HASHED TABLE OF ZSCHOOL_WXS_STR_01 WITH UNIQUE KEY ZSCHOOL ZSNAME .   "哈希表 , 关键字必须唯一

INTNAL TABL

*&---------------------------------------------------------------------**& Report  ZWXS_HTKJ_TEST_02*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  ZWXS_HTKJ_TEST_02 MESSAGE-ID ZWXS_MESSAGE .WRITE '变量的创建及内表的操作' .MESSAGE S002 .CONSTANTS C_CON TYPE C LENGTH 3 VALUE 'SAP' .     "常量WRITE / C_CON .TYPES GS_SCHOOL_STR TYPE ZSCHOOL_WXS_STR_01 .  " 参照数据库中的结构 创建结构体类型DATA GS_SCHOOL TYPE GS_SCHOOL_STR .TYPES GTY_SCHOOL_T TYPE STANDARD TABLE OF ZSCHOOL_WXS_TTY_01 .  " 参照数据库的表创建 内表 无表头行DATA GT_SCHOOL TYPE GTY_SCHOOL_T .TYPES GTY_SCHOOL_T2 TYPE TABLE OF ZSCHOOL_WXS_TEST .      "参照数据库表 创建内表DATA GTY_SCHOOL2 TYPE GTY_SCHOOL_T2 .DATA GTY_STUDENT_T TYPE STANDARD TABLE OF ZSTUDENT_WXS WITH HEADER LINE .  "参照数据库表创建 内表 带表头行TYPES : BEGIN OF GS_STRUCTURE_STR  ,            "创建结构体          ZCODE TYPE ZSTUDENT_WXS-ZSTUCODE ,          ZNAME TYPE ZSTUDENT_WXS-ZSTUNAME ,          SEX TYPE ZSTUDENT_WXS-ZSTUSEX ,          ZSCHOOL TYPE ZSTUDENT_WXS-ZSCHOOL ,          ZSNAME TYPE ZSCHOOL_WXS_TEST-ZSNAME ,        END OF GS_STRUCTURE_STR . DATA GS_STRUCTYRE TYPE GS_STRUCTURE_STR .

内表的操作
*&---------------------------------------------------------------------**& Report  ZWXS_HTKJ_TEST_03*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  ZWXS_HTKJ_TEST_03 MESSAGE-ID ZWXS_MESSAGE.CONSTANTS C_CON TYPE C LENGTH 3 VALUE 'SAP' .TYPES : BEGIN OF GTY_TOTAL ,          ZCODE TYPE ZSTUDENT_WXS-ZSTUCODE ,          ZNAME TYPE ZSTUDENT_WXS-ZSTUNAME ,          ZSEX TYPE ZSTUDENT_WXS-ZSTUSEX ,          ZSCHOOL TYPE ZSTUDENT_WXS-ZSCHOOL ,          ZSNAME TYPE ZSCHOOL_WXS_TEST-ZSNAME ,        END OF GTY_TOTAL .DATA GT_TOTAL TYPE STANDARD TABLE OF GTY_TOTAL .DATA GS_TOTAL TYPE GTY_TOTAL .DATA GT_SCHOOL_ZZZ TYPE STANDARD TABLE OF  ZSCHOOL_WXS_TEST .DATA GS_SCHOOL_ZZZ TYPE ZSCHOOL_WXS_TEST .DATA GT_SCHOOL LIKE GT_SCHOOL_ZZZ .DATA GS_SCHOOL LIKE GS_SCHOOL_ZZZ .DATA GT_SCHOOL_HASHED TYPE HASHED TABLE OF ZSCHOOL_WXS_TEST WITH UNIQUE KEY ZSNAME .DATA GT_STUDENT_ZZZ TYPE TABLE OF ZSTUDENT_WXS WITH HEADER LINE .MESSAGE S003 .*内表数据的插入  APPEND  不能是HASHED表APPEND GS_SCHOOL_ZZZ TO GT_SCHOOL_ZZZ .   "无表头行 内表APPEND GT_STUDENT_ZZZ .                   "有表头行内表APPEND INITIAL LINE TO GT_SCHOOL_ZZZ .    "添加空行APPEND LINES OF GT_SCHOOL_ZZZ TO GT_SCHOOL .  " GT_SCHOOL_ZZZ 添加至 GT_SCHOOLAPPEND LINES OF GT_SCHOOL_ZZZ FROM 1 TO 3 TO GT_SCHOOL . " 内表GT_SCHOOL_ZZZ的第一至三行 添加至 内表 GT_SCHOOL*内表数据的插入  INSERTINSERT GS_SCHOOL_ZZZ INTO GT_SCHOOL_ZZZ INDEX 2 . "将结构 插入至 内表 第2行INSERT GS_SCHOOL_ZZZ INTO TABLE GT_SCHOOL_HASHED  . " 根据关键字 插入内表INSERT LINES OF GT_SCHOOL_ZZZ INTO GT_SCHOOL INDEX 3 . " 将GT_SCHOOL_ZZZ 添加至 GT_SCHOOLINSERT LINES OF GT_SCHOOL_ZZZ FROM 1 TO 3 INTO GT_SCHOOL INDEX 3 . "将内表GT_SCHOOL_ZZZ的一至三行添加至内表GT_SCHOOL,从第三行开始。INSERT LINES OF GT_SCHOOL_ZZZ INTO TABLE GT_SCHOOL .    "按照关键字插入 。* 内表的数据插入 COLLECT  聚集附加TYPES :  BEGIN OF GTY_COLLECT ,            NAME TYPE C LENGTH 8 ,            AGE TYPE I ,         END OF GTY_COLLECT .DATA GT_COLLECT TYPE TABLE OF GTY_COLLECT .DATA GS_COLLECT TYPE GTY_COLLECT .GS_COLLECT-NAME = '甲' .GS_COLLECT-AGE = 10 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '甲' .GS_COLLECT-AGE = 10 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '甲' .GS_COLLECT-AGE = 10 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '甲' .GS_COLLECT-AGE = 10 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '乙' .GS_COLLECT-AGE = 7 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '乙' .GS_COLLECT-AGE = 7 .COLLECT GS_COLLECT INTO GT_COLLECT .GS_COLLECT-NAME = '乙' .GS_COLLECT-AGE = 7 .COLLECT GS_COLLECT INTO GT_COLLECT .LOOP AT GT_COLLECT INTO GS_COLLECT .   "LOOP 循环语句  WRITE : / GS_COLLECT-NAME , GS_COLLECT-AGE .ENDLOOP .*内表的修改 MODIFYCLEAR GS_SCHOOL .GS_SCHOOL-ZSCHOOL = '201' .GS_SCHOOL-ZSNAME = '哈弗大学' .MODIFY GT_SCHOOL FROM GS_SCHOOL INDEX 1 .MODIFY TABLE GT_SCHOOL_HASHED FROM GS_SCHOOL .     "HASHED 表修改*索引表的修改LOOP AT GT_SCHOOL INTO GS_SCHOOL .  IF GS_SCHOOL-ZSCHOOL = '101' .    GS_SCHOOL-ZSNAME = '南京大学' .    MODIFY GT_SCHOOL FROM GS_SCHOOL INDEX SY-TABIX .  ENDIF .ENDLOOP .* 哈希表的修改LOOP AT GT_SCHOOL_HASHED INTO GS_SCHOOL .  IF GS_SCHOOL-ZSCHOOL = '102' .    GS_SCHOOL-ZADD = 'CHINA' .    MODIFY TABLE GT_SCHOOL_HASHED FROM GS_SCHOOL TRANSPORTING ZADD .  ENDIF .ENDLOOP .*内表的读取READ TABLE GT_SCHOOL INTO GS_SCHOOL INDEX 1 .READ TABLE GT_SCHOOL INTO GS_SCHOOL WITH KEY ZSNAME = '北大' ZADD = '中国' .IF SY-SUBRC = 0 .  " 读取满足条件的第一条  WRITE / '读取成功' .ENDIF .CLEAR GT_SCHOOL[] .GS_SCHOOL-ZSCHOOL = '101' .GS_SCHOOL-ZSNAME = '北大' .GS_SCHOOL-ZADD = 'CHINA' .APPEND GS_SCHOOL TO GT_SCHOOL .GS_SCHOOL-ZSCHOOL = '102' .GS_SCHOOL-ZSNAME = '北大' .GS_SCHOOL-ZADD = 'CHINA' .APPEND GS_SCHOOL TO GT_SCHOOL .GS_SCHOOL-ZSCHOOL = '103' .GS_SCHOOL-ZSNAME = '北大' .GS_SCHOOL-ZADD = 'CHINA' .APPEND GS_SCHOOL TO GT_SCHOOL .GS_SCHOOL-ZSCHOOL = '104' .GS_SCHOOL-ZSNAME = '北大' .GS_SCHOOL-ZADD = 'CHINA' .APPEND GS_SCHOOL TO GT_SCHOOL .READ TABLE GT_SCHOOL INTO GS_SCHOOL WITH KEY ZSNAME = '北大' ZADD = 'CHINA' .IF SY-SUBRC = 0 .  WRITE : / 'READ 读取成功 !' .  WRITE : / 'READ 读取结果 :' , GS_SCHOOL-ZSCHOOL .ENDIF .LOOP AT GT_SCHOOL INTO GS_SCHOOL WHERE ZSNAME = '北大' AND ZADD = 'CHINA' .  WRITE : / '循环读取结果:' , GS_SCHOOL-ZSCHOOL .ENDLOOP .* 内表的删除  DELETEDELETE GT_SCHOOL INDEX 1 .DELETE TABLE GT_SCHOOL_HASHED FROM GS_SCHOOL .  "根据关键字删除*删除临近的重复行 ,留下第一行SORT GT_SCHOOL BY ZSCHOOL ZSNAME .DELETE ADJACENT DUPLICATES FROM GT_SCHOOL COMPARING ZSCHOOL ZSNAME .* 清空CLEAR : GS_SCHOOL , GT_STUDENT_ZZZ .  "清空表头行CLEAR GT_STUDENT_ZZZ[] .  "清空表体REFRESH GT_STUDENT_ZZZ .   " 总是清空表体FREE GT_STUDENT_ZZZ .     " 释放内存空间



原创粉丝点击