您的位置:首页 > 其它

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

2017-11-28 10:41 274 查看

*&---------------------------------------------------------------------*
*& 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 element
GV_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 TABLE

TYPES 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_SCHOOL
APPEND LINES OF GT_SCHOOL_ZZZ FROM 1 TO 3 TO GT_SCHOOL . " 内表GT_SCHOOL_ZZZ的第一至三行 添加至 内表 GT_SCHOOL

*内表数据的插入  INSERT
INSERT 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_SCHOOL
INSERT 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 .

*内表的修改 MODIFY
CLEAR 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 .

* 内表的删除  DELETE
DELETE 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 .     " 释放内存空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: