本文主要介绍一下SAP ABAP中关于数据类型的概要以及分类,其中数据类型包括预定义的数据类型,数据字典数据类型,用户自定义数据类型,下面将依次对其进行讲解
数据类型内涵
数据类型描述了数据对象的技术属性(类型和长度),用于定义数据对象,并且本身不能被直接引用或赋值,是一种用来约束数据的解释
ps:数据对象是如(如文本、变量、常量),或者DATA 关键字用来声明的变量或者实体结构具有实际的内存空间
数据类型分类
数据类型分类 | 解释 |
预定义数据类型 | SAP中预定义的数据类型(整数型、浮点型、文本型、日期型......) |
数据字典数据类型 | T-CODE SE11中定义的数据类型(包括数据元素,结构,表类型,数据库表,视图,类/接口) |
用户自定义数据类型 | 用户程序中使用TYPES关键字自定义的数据类型 |
预定义数据类型
预定义的数据类型包括两种,一种是在系统中已经预定义好的数据类型,在T-CODE:SE38 ABAP编辑器中定义数据对象时可以直接使用的,其中大致有如下最常用的8种:
数据类型 | 默认长度 | 有效长度 | 默认值 | 解释说明 |
I | 4 | 4 | 0 | 整型 |
F | 8 | 8 | 0 | 浮点型 |
P | 8 | 1~16 | 0 | 压缩数类型(将两个十进制数字压缩到一个字节) |
C | 1 | 1~65535 | '...' | 文本型 |
D | 8 | 8 | '00000000' | 日期型(YYYYMMDD) |
N | 1 | 1~65535 | '0...0' | 数字字符串类型(0~9之间的字符组成的数字字符串) |
T | 6 | 6 | '000000' | 时间类型(格式:HHMMSS) |
STRING | 0 | ANY | SPACE | 字符串类型 |
此外在T-CODE:SE11中定义数据元素时还有31种数据类型,它们是用于专门维护数据元素所使用的,列举如下:
数据类型 | 简短描述 |
ACCP | 过账期间YYYYMM |
CHAR | 字符串 |
CLNT | 集团 |
CUKY | 货币字段的货币码 |
CURR | 采用BCD格式的货币字段 |
DF16_DEC | 以BCD格式保存的十进制浮点数 |
DF16_RAW | 以二进制数字形式保存的十进制浮点数 |
DF16_SCL | 具有比例的十进制浮点数(已弃用) |
DF34_DEC | 以BCD格式保存的十进制浮点数 |
DF34_RAW | 以二进制数字形式保存的十进制浮点数 |
DF34_SCL | 具有比例的十进制浮点数(已弃用) |
DATS | 使用格式YYYYMMDD的日期 |
DEC | 采用BCD格式的压缩数字 |
FLTP | 浮点数 |
INT1 | 1字节整数,0到255 |
INT2 | 2字节整数,-32768到32767 |
INT4 | 4字节整数,-2147483648到2147483467 |
INT8 | 8字节整数 |
LANG | 语言代码 |
LCHR | 长字节串 |
LRAW | 长字节字符串 |
NUMC | 数字文本 |
PREC | 过时数据类型 |
QUAN | 采用BCD格式的数量字段 |
RAW | 字节序列 |
RAWSTRING | 字节字符串(BLOB) |
SSTRING | 字符串 |
STRING | 字符串(CLOB) |
TIMS | 格式为HHMMSS的时间 |
UNIT | 数量字段的单元码 |
VARC | 过时数据类型 |
数据字典数据类型
ABAP数据字典是定义和管理数据元素及数据库元素的中心工具,系统的所有全局数据类型以及数据库表结构等都需要在数据字典中创建和维护。数据字典保证了数据的完整性,一致性,安全性。
数据字典类型 | 解释说明 |
数据元素 | 最基本的数据单位,没有结构,定义了数据库表中字段的描述,使用预定义的数据类型或参考类型对字段特征进行描述。 |
结构 | 由数据元素或者其他的数据类型组成的一个特定结构。与用户自定义的结构并无本质上的区别,只不过数据类型中的结构是全局性、永久性的,而用户自定义的结构是局部性、暂时性的。 |
表类型 | TABLE类型的数据元素,可存放多行数据。与用户自定义的表类型并无本质上的区别,只不过数据类型中的表类型是全局性、永久性的,而用户自定义的表类型是局部性、暂时性的。 |
数据库表 | 数据库表是数据库中实际存放数据的地方,由行(记录)和列(字段)组成。在数据字典里可以创建数据库表,并且表中的列通过数据元素来定义。 |
视图 | 视图是一个或者多个数据库表的逻辑表现形式,它本身不存储数据。视图有4种类型: 1. Database view :对一张或者多张表按照连接条件和选择条件筛选后的数据显示的视图。连接条件自己定义.连接条件是inner join。一张表的视图可以维护数据,维护了视图之后,表的数据也改变。 多张表的视图只能显示。 2. Projection view: 数据来自一张表,用于屏蔽一些字段(一般用于保护数据时使用). 3. Maintenance view: 允许你进行对几个表的数据进行修改,参与连接的表必须存在外键,他们的连接条件是不能自定义的。要维护和显示数据必须要生成表格维护对话框(在“表格维护生成器”中维护),所有主键要在视图的字段里 4. Help view: 该类视图可以用搜索帮助的“selection method”中使用,参与连接表必须存在外键. |
以上所列举的全局数据字典数据类型在程序中都是可以直接被用来参照定义的。比如说在程序中数据库表可以被用来参照定义相同结构的表类型或者内表或者结构;数据库表中某一字段亦可被用来参照定义局部结构体类型或者局部结构体变量中的字段。总而言之,数据字典中的数据类型可以全局使用,并且可以被参照定义的方式有多种多样,读者可以自行去尝试!下面给出几段示例代码和效果
案例代码演示(参照数据库表定义)
DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT."参照数据库表SFLIGHT定义内表变量 GS_SFLIGHT TYPE SFLIGHT. "参照数据库表SFLIGHT定义结构体变量 TYPES:TY_SFLIGHT TYPE SFLIGHT, " 参照数据库表SFLIGHT定义结构体类型 TY_TAB_SFLIGHT TYPE SFLIGHT. "参照数据库表SFLIGHT定义表类型
案例代码演示(参照数据库表字段定义)
DATA:BEGIN OF GS_SFLIGHT,"参照数据库表SFLIGHT字段定义结构体变量 ZCARRID TYPE SFLIGHT-CARRID, ZCONNID TYPE SFLIGHT-CONNID, ZFLDATE TYPE SFLIGHT-FLDATE, ZPRICE TYPE SFLIGHT-PRICE, END OF GS_SFLIGHT. TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT字段定义结构体类型 ZCARRID TYPE SFLIGHT-CARRID, ZCONNID TYPE SFLIGHT-CONNID, ZFLDATE TYPE SFLIGHT-FLDATE, ZPRICE TYPE SFLIGHT-PRICE, END OF TY_SFLIGHT.
案例代码演示(参照数据元素定义)
要参照的数据元素如下蓝框所示:
DATA:BEGIN OF GS_SFLIGHT,"参照数据库表SFLIGHT数据元素定义结构体变量 ZCARRID TYPE S_CARR_ID, ZCONNID TYPE S_CONN_ID, ZFLDATE TYPE S_DATE, ZPRICE TYPE S_PRICE, END OF GS_SFLIGHT. TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT数据元素定义结构体类型 ZCARRID TYPE S_CARR_ID, ZCONNID TYPE S_CONN_ID, ZFLDATE TYPE S_DATE, ZPRICE TYPE S_PRICE, END OF TY_SFLIGHT.
用户自定义数据类型
用户自定义的数据类型是指在程序内部定义的数据类型,是用户基于全局数据字典数据类型或者预定义数据类型再定义的新的类型,也可以是用户参照已经在程序中自定义的数据类型再定义的新的类型。这些类型只能在用户创建的程序内部可见,其他程序是不能访问到它们的。在程序中通过使用【TYPES】关键字来自定义数据类型,下面给出具体的案例代码:
案例代码演示(参照预定义数据类型定义结构体类型)
TYPES:BEGIN OF TY_TEST,"参照系统预定义数据类型定义结构体类型 COL1 TYPE C, COL2 TYPE I, COL3 TYPE P, COL4 TYPE N, END OF TY_TEST.
案例代码演示(参照全局数据库表定义表类型和结构体类型)
TYPES:TY_TAB_VBAK TYPE TABLE OF VBAK,"参照数据库表VBAK定义表类型 TY_VBAK TYPE VBAK. "参照数据库表VBAK定义结构体类型
案例代码演示(参照全局数据库表中字段定义结构体类型)
TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT字段定义结构体类型 ZCARRID TYPE SFLIGHT-CARRID, ZCONNID TYPE SFLIGHT-CONNID, ZFLDATE TYPE SFLIGHT-FLDATE, ZPRICE TYPE SFLIGHT-PRICE, END OF TY_SFLIGHT.
案例代码演示(参照全局数据元素定义结构体类型)
TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT数据元素定义结构体类型 ZCARRID TYPE S_CARR_ID, ZCONNID TYPE S_CONN_ID, ZFLDATE TYPE S_DATE, ZPRICE TYPE S_PRICE, END OF TY_SFLIGHT.
案例代码演示(参照自定义结构体类型定义表类型)
TYPES:BEGIN OF TY_SFLIGHT, ZCARRID TYPE S_CARR_ID, ZCONNID TYPE S_CONN_ID, ZFLDATE TYPE S_DATE, ZPRICE TYPE S_PRICE, END OF TY_SFLIGHT. TYPES:TY_TAB_SFLIGHT TYPE TABLE OF TY_SFLIGHT."参照自定义的结构体类型TY_SFL