【ABAP基础语法】


数据类型和数据对象

在ABAP语句中,使用变量之前,必须针对变量进行声明。声明过程中
及到以下两个概念:

数据类型

  • 数据类型描述了数据对象的技术属性(类型和长度),用于定义数据,对象本身不能被直接引用或赋值
  • 数据元素(DataElement):用于定义一个的字段类型的变量
  • 结构体(Structure):用于定义一个内存中的结构体变量
  • 内表类型(TableType):用于定义一个内存中的内表
  • 数据类型的使用场合
    在这里插入图片描述

数据对象

  • 数据对象(如文本、变量、常量)
  • DATA 关键字用来声明的变量或者实体结构具有实际的内存空间

变量

参照数据类型

DATA GV_DATA TYPE DATATYPE
GV_DATA是变量名,DATATYPE是数据类型

  • 数据类型的分类

1.全局类型(SE11)
数据元素的声明

DATA GV_SEX TYPE ZSEX_JSM.
DATA GV_WEIGH TYPE ZSTUDENT_JSM_01-WEIGH.
GV_SEX = 'F'.

结构体的声明

结构类型属于一种复杂类型,由多个数据元素组成,参照结构类生成的数据对象称为结构体。
使用TYPES和DATA语句构造内部的结构体的语法格式如下:

TYPES/DATA: BEGIN OF structure,
field1 [TYPE type/LlKE dobj],
field2 [TYPE type/LIKE dobj],
...
fieldn [TYPE type|LlKE dobj],
END OF structure.

Structure:结构名称
Field:字段名称
Type:数据类型
Dobj:数据对象

  • 可以使用符号-访问结构体对象的组件:structure-field
  • TABLES语句,声明一个和数据库表名称完相同的结构
*结构体类型的声明 
DATA GS_SCHOOL TYPE ZSCHOOL_JSM_STR_01.
DATA GS_SCHOOL2 TYPE ZSCHOOL_JSM_STR_01.
GS_SCHOOL-ZSCHOOL = '101'.
GS_SCHOOL-ZSNAME = '清华'.
GS_SCHOOL-ZADD = '北京'.
*如果A和B的结构完全相同,可以使用MOVE-CORRESPONDING A TO B 将A的值赋给B
MOVE-CORRESPONDING GS_SCHOOL TO GS_SCHOOL2.

在局部类型/对象的声明中,所有类型都可以进行参照,因此ABAP中存在结构的嵌套。

*定义嵌套的结构
TYPES: BEGIN OF GTY_SCHOOL1,
          SID TYPE ZSCHOOL_JSM_STR_01,"ZSCHOOL_JSM_STR_01是结构体
          ZSCHOOL TYPE ZSCHOOL_JSM_01-ZSCHOOL,
          ZSNAME TYPE ZSCHOOL_JSM_01-ZSNAME,
          ZADD TYPE ZSCHOOL_JSM_01-ZADD,
       END OF GTY_SCHOOL1.
DATA GS_SCHOOL3 TYPE GTY_SCHOOL1.
MOVE GS_SCHOOL TO GS_SCHOOL3.
*结构复用
TYPES  BEGIN OF GTY_SCHOOL2.
       INCLUDE STRUCTURE ZSCHOOL_JSM_01."包含结构INCLUDE和TYPE一个层级,所有前面不能使用TYPE关键字
TYPES: FLAG TYPE C LENGTH 1,
       END OF GTY_SCHOOL2.
DATA GS_SCHOOL4 TYPE GTY_SCHOOL2.

表类型的声明

表类型是ABAP中的另外一种复杂类型,该类型的数据对象称为内表。表类型跟结构化类型相似。内表所占的内存不能在定义时确定,它会随着数据的增加不断的扩充它所需要的内存。
在程序中,内表可以通过TYPE/DATA语句中的Table of附加项进行构造:

TYPES |DATA: itab TYPE|LIKE tabkind OF linetype [WITH KEY] [INITIAL SIZE n].

Itab:内表名称
Tabkind:表类型(标准
表,排序表,哈希表)
Linetype:行类型
Initial size n:如果n为0或者不指定的话,程序会为内表分配初始化为8K大小的内存。当内表在使用过程中超过了这个内存的时候会自动增加内存.

* 内表 INTERNAL TABLE
TYPES GTY_SCHOOL_T TYPE TABLE OF ZSCHOOL_JSM_STR_01."参照结构体类型
DATA GT_SCHOOL TYPE GTY_SCHOOL_T.

TYPES GTY_SCHOOL_T2 TYPE ZSCHOOL_JSM_TTY_01."参照表结构类型
DATA GT_SCHOOL_2 TYPE TABLE OF ZSCHOOL_JSM_STR_01 INITIAL SIZE 0.
DATA:  BEGIN OF GT_SCHOOL_D OCCURS 0,
          SID TYPE ZSCHOOL_JSM_STR_01,
          ZSCHOOL TYPE ZSCHOOL_JSM_01-ZSCHOOL,
          ZSNAME TYPE ZSCHOOL_JSM_01-ZSNAME,
          ZADD TYPE ZSCHOOL_JSM_01-ZADD,
       END OF GT_SCHOOL_D.

GS_SCHOOL-ZSCHOOL = '101'.
GS_SCHOOL-ZSNAME = '清华'.
GS_SCHOOL-ZADD = '北京'.
APPEND GS_SCHOOL TO GT_SCHOOL_D.

GS_SCHOOL-ZSCHOOL = '101'.
GS_SCHOOL-ZSNAME = '清华'.
GS_SCHOOL-ZADD = '北京'.
APPEND GS_SCHOOL TO GT_SCHOOL_D.

READ TABLE GT_SCHOOL INTO GS_SCHOOL INDEX 1.
DATA:  BEGIN OF GS_SCHOOL_ABC,
          SID TYPE GTY_SCHOOL_T,"内表类型的字段
          ZSCHOOL TYPE ZSCHOOL_JSM_01-ZSCHOOL,
          ZSNAME TYPE ZSCHOOL_JSM_01-ZSNAME,
          ZADD TYPE ZSCHOOL_JSM_01-ZADD,
       END OF GS_SCHOOL_ABC.

GS_SCHOOL_ABC-ZSCHOOL = '100'.
CLEAR GS_SCHOOL.
GS_SCHOOL-ZSCHOOL = '101'.
GS_SCHOOL-ZSNAME = '清华'.
GS_SCHOOL-ZADD = '北京'.
APPEND GS_SCHOOL TO GS_SCHOOL_ABC-SID."从结构赋给内表
GS_SCHOOL_ABC-SID[] = GT_SCHOOL[]."和内表相对应的结构体,又叫做工作区
*参照结构体类型声明的带有表头行的内表
DATA GT_SCHOOL_H TYPE TABLE OF ZSCHOOL_JSM_STR_01 WITH HEADER LINE.
CLEAR: GT_SCHOOL_H,GT_SCHOOL_H[]."清空表头行和表体
GT_SCHOOL_H-ZSCHOOL = '101'.
GT_SCHOOL_H-ZSNAME = 'ABC'.
APPEND GT_SCHOOL_H."将表头行的数据插入表体

CONSTANTS C_CHAR TYPE C LENGTH 10 VALUE 'ABC'."声明一个常量
CLEAR: GT_SCHOOL_H."清空表头行
GT_SCHOOL_H-ZSCHOOL = '101'.
GT_SCHOOL_H-ZSNAME = C_CHAR.
APPEND GT_SCHOOL_H.
*此时内表中有两条数据 

2.标准类型

  • 标准数据类型
    在这里插入图片描述
    在这里插入图片描述
    注意:LENGTH在声明变量时只可用于C,N,X,P类型
    在这里插入图片描述
* 创建变量
DATA GV_CHAR TYPE C LENGTH 10 VALUE 'CHAR123'.
DATA GV_NUMC TYPE N LENGTH 10 VALUE '123'.
DATA GV_DEC TYPE P LENGTH 10 VALUE '3.14'.
DATA GV_DATE1 TYPE D VALUE '20241106'.
DATA GV_DATE2 TYPE D VALUE '20241105'.
DATA GV_INT TYPE I .
DATA GV_TIME TYPE T VALUE '120834'.

3.本地类型(在程序中使用TYPES关键字自定义的数据类型)

TYPES GTY_CHAR01 TYPE C LENGTH 3."声明数据类型
DATA GV_CHAR01 TYPE GTY_CHAR01."声明对象

参照数据对象

DATA GV_DATA2 LIKE GV_DATA1.

*创建和GS_SCHOOL5结构相同的变量
DATA:  BEGIN OF GS_SCHOOL5,
          SID TYPE ZSCHOOL_JSM_STR_01,
          ZSCHOOL TYPE ZSCHOOL_JSM_01-ZSCHOOL,
          ZSNAME TYPE ZSCHOOL_JSM_01-ZSNAME,
          ZADD TYPE ZSCHOOL_JSM_01-ZADD,
       END OF GS_SCHOOL5.
DATA GS_SCHOOL6 LIKE GS_SCHOOL5.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值