数据类型-Data Type:定义程序中可以使用的数据类型,使用前要先定义
数据变量-Data Variable:参照数据类型定义的、可以存储值的变量,就是变量嘛
数据类型
- 数据类型在ABAP程序中用于定义变量类型
- 数据类型和数据对象是单独声明的,数据对象则参照数据类型定义
- 在程序中利用TYPES语句声明数据类型,只能在该程序中使用,也成为本地数据类型
- 本地数据类型可以参照ABAP数据类型进行声明
数据变量
- 数据变量是在程序中参照数据类型定义的值。
- 常用方法是用Data语句定义变量
注意:变量实际指数据对象,数据对象在程序执行期间占用内存空间
三种数据类型
1.ABAP基本数据类型
- 系统内部定义的数据类型 https://www.cnblogs.com/zhaorp/p/6925301.html
-
类型
允许最大长度(字符数)
默认长度(省略时采用)
说明
初始值
C
1~262143个字符
1 字符
如果未在 DATA 语句中指定参数<length>和<type>,则创建长度为 1 的字符
每个位置都是空格
N
1~262143个字符
1 字符
0到9之间字符组成的数字字符串
如果未在 DATA 语句中指定参数<length>,则创建长度为 1
"0"每个位置都是阿拉伯数字0
D
8 个字符
日期格式必须为 YYYYMMDD 取值范围:YYYY (year): 0001 to 9999, MM(month): 01 to 12, DD (day): 01 to 31
"00000000"
T
6 个字符
格式为 24-hour的 HHMMSS
HH:00 to 23
MM: 00 to 59
SS: 00 to 59
"000000"
I
4 bytes
-2.147.483.648 to +2.147.483.647(.点号为千分位分隔符,不是小数点,而,逗号则表示是小数点)
如果运算出现非整型的结果(如小数)则进行四舍五入,而不是截断
0
F
8 bytes
小数位最大可以到17位,即可精确到小数点后17位
取值范围:-1,7976931348623157EE+308 to -2,2250738585072014EE-308 for the negative area, the value zero, and +2,2250738585072014EE-308 to +1,7976931348623157EE+308 for the positive area.
如果要求高精度,则不应该使用类型 F 数据。而应代之以类型 P 数据
F赋值时,会转换为标准形式:<±尾数部分>E±<指数部分>,且尾数部分的小数位最多为17位
0
如果值是小数,则要将值使用引号引起来
P
1 to 16 bytes
8 bytes
有效长度为1到16个字节。
两个数字位压缩后才占一个字节,由于0-9的数字只需要4Bit位,所以一个字节实质上允许存储二位数字,这就是P数据类型为压缩数据类型的由来,因为定义的的数据长度比存储于内存中要长。并借用最后半个字节,即字面上的一位来存储小数点、正号、负号、或者是这三种中间的组合————存储的可能是通过将小数点与正负号经过某种位运算后的结果,因为半个字节不可能存储小数或正负号的所对应的ASCII码(都比15大)
P类型最多允许14位小数位,即可以精确到小数点后14,再除开小数点与正负号占半个字节,即字面上1位4Bit,此时最大整数位最长可达16*2 = 32 – 1 = 31 -14 = 17位
Depending on the field length len(len表示定义时P的整个长度) and the number of decimal places dec(dec表示小数位), the following applies for the value area: (-10^(2len -1) +1) / (10^(+dec)) to (+10^(2len -1) -1) /(10^(+dec)) in steps of 10^(-dec). Values in between this range are rounded off.
在计算过程中如果小数部分过长,则进行四舍五入
0
若小数部分超过长度,则自动按四舍五入将多余的小数除掉;如果整数部分超过长度,则系统运行出错
如果值是小数,则要将值使用引号引起来
X
1~524,287 bytes
1 byte
十六进制字符 0-9, A-F具体的范围为:00~FF
类型X是十六进制类型,可表示内存字节实际内容,使用两个十六制字符表示一个字节中所存储的内容。但直接打印输出时,输出的还是赋值时字面意义上的值,而不是Unicode解码后的字符
如果未在 DATA 语句中指定参数<length>,则创建长度为 1
注:如果值是字母,则一定要大写,否则赋值不进
DATA: x2(2) TYPE x.
x2 = ‘3AA‘.
WRITE : / x2."输出赋值时字面上的值:3AA0十六进制的00
string
不限定
在系统内部,长度可变的内置类型(String、XString)是通过引用实际动态的数据对象的固定内存地址来进行操作,因而这两种内置类型和引用类型一样,属于纵深类型。
长度为0的空字符串‘‘
xstring
不限定
由十六进制字符 0-9, A-F组成字符串。直接打印输出时,输出的还是赋值时字面意义上的值,而不是Unicode解码后的字符串
注:如果值是字母,则一定要大写,否则赋值不进
DATA : xs TYPE xstring .
xs = ‘303132‘."表示字符串 012
WRITE :/ xs."但输出的还是303132长度为0的空字符串‘‘
b
1 Byte
0 to 255属于ABAP内部类型,在ABAP程序中不能直接使用
0
s
2 bytes
-32.768 to +32.767属于ABAP内部类型,在ABAP程序中不能直接使用
0
2.局部数据类型-存在于程序内部
3.全局数据类型-存在于数据字典中
- 全局数据类型是指所有程序都可以使用的数据类型
- 可以用TYPE语句参照ABAP数据字典里的数据类型定义变量
声明数据类型
1.参考基本数据类型定义变量
DATA:gv_num TYPE i, gv_deci TYPE f.
TYPE后面是ABAP基本数据类型
2.参照局部数据类型定义变量
将程序中常用的数据及结构声明为一个数据类型,定义变量时可以参考此数据类型定义,但此数据类型只能在改程序内容使用
TYPES: BEGIN OF t_struct, col1 TYPE c, col2 TYPE i, col3 TYPE d, END OF t_struct. DATA: gs_struct TYPE t_struct, gv var LIKE gs struct-col1.
3.参照全局数据类型定义变量
利用ABAP数据字典(表/结构体/数据元素等)定义变量的方法,此数据类型在所有程序都可以使用
DATA: gv_carrid TYPE s_carr_id, gv_connid TYPE sflight-carrid, gv_matnr TYPE mara-matnr.
DATA语句
用于定义数据变量,变量名可以包含_, 长度最长30位
1. TYPE type
定义变量的数据类型
DATA: gv_num TYPE i.
冒号是一个命令从逗号开始, 遇到句号结束
下面的命令效果等同
DATA gv_num1 TYPE I. DATA gv_num2 TYPE I. DATA: gv_num1 TYPE I, gv_num2 TYPE I.
2. LIKE num
定义与前一个变量相同类型的变量, num可以是任何一种数据类型(字段/参数.结构体/系统变量)
DATA: GV_NUM3 LIKE GV_NUM1.
3.VALUE INT
所有数据类型都存在初始值
DATA语句可以用VALUE选项设置初始值INT
DATA: GV_NUM TYPE I VALUE 123, GV_FLAG VALUE ‘X‘, GV_VAL VALUE IS INITIAL GV_IDX LIKE SY-TABIX VALUE 45.
VALUE IS INITIAL 变量的初始值为所参照的数据类型的初始值,可以省略,效果一样
4. LENGTH N
LENGTH N用于指定字段长度, 仅适用数据类型: C/N/P/X
DATA: GV_NUM TYPE N LENGTH 2.
5. DECIMALS N
用于指定1-14位小数,仅适用于数据类型P
DATA: GV_NUM TYPE P DECIMALS 3.
第一个helloworld
REPORT Z_YZW_HELLOWORLD. "报表名称 TYPES T_VAR TYPE C LENGTH 20. "声明一个局部数据类型为C,长度为20 DATA GV_VAR TYPE T_VAR. "声明一个变量,类型使用上面定义的数据类型 GV_VAR = ‘HELLOW ABAP‘. "给变量赋值 WRITE GV_VAR. "打印变量
- .号表示一行代码结束
- 字符串用单引号
- =号前后要留空格, 和SHELL一样
- *号表示一行注释, "号表示右边注释
命名规则
全局变量以G开头
局部变量以L开头
一个好的命名包括:作用范围/数据类型/含义
数据基本运算中, 浮点数需要调用function FLTP_CHAR_CONVERSION转换成char类型
DATA GV_F1 TYPE F VALUE ‘2.22‘. DATA GV_F2 TYPE F VALUE ‘3.33‘. DATA GV_FRESULT TYPE F. DATA GV_CRESULT TYPE C LENGTH 16. GV_FRESULT = GV_F1 * GV_F2. WRITE / GV_FRESULT. CALL FUNCTION ‘FLTP_CHAR_CONVERSION‘ exporting DECIM = 2 INPUT = GV_FRESULT importing FLSTR = GV_CRESULT. WRITE / GV_CRESULT .