ABAP 开发系列(04): ABAP数据类型与数据对象ABAP Programming Language 的内容主要有: 1.数据类型与数据对象 2.内表和内表结构(Internal Table) 3.数据流控制语句 4.模块化(Modularization)
1.数据类型与数据对象 类型 | 描述 | 长度 | 标准长度 | C | 字符 | 1-65365字符 | 1位字符 | N | 数字文本 | 1-65365字符 | 1位字符 | I | 整型 | 4 位 | | P | 包 | 1-16位 | 8位 | F | 浮点型 | 8 位 | | D | 日期类型 | 8位字符 | | T | 时间类型 | 6位字符 | | X | 十六进制 | 1位 | |
其中: C 和 N 为字符类型,N 为数字文本,如果定义的位数为4位,但是数据只有两位时,会补上前置零,例如:0020. I、P、F为数字类型,I 为整型,P 和 F 都为浮点数,只是P的精确度比 F 高,故用 P 类型频率会比 F 类型高。 ABAP 中的日期和时间,分属不同类型,分别是 D 和 T ,然后在显示时,字符间中间不带任何格式符; 例如,日期:20140224,时间:120535。
提示:内部显示和外部显示 在 SAP 数据字典中,显示的数据需要区分内部显示和外部显示。 外部显示就是我们在屏幕上看到的数据; 内部显示则是系统内部操作的数据。 例如: N 类型:0020,外部显示就是20,而内部显示则是0020; 日期类型:2014-02-24,外部显示为2014.02.24(根据SAP用户日期格式设置显示),而内部显示则是20140224.
1.2 变量的定义 1.2.1 通过类型定义 语法: DATA <Name> (<length>) TYPE <data type> VALUE <default>. 通过Data关键字声明变量,如若需要定义多个变量时,可用在Data 关键字后加上冒号“:”. 例如: [size=1em][size=1em]01
[size=1em]02
[size=1em]03
[size=1em]04
[size=1em]05
[size=1em]06
[size=1em]07
[size=1em]08
[size=1em]09
[size=1em]10
[size=1em]11
| [size=1em][size=1em]* 定义单个变量:
[size=1em]DATA Person(35) TYPE C.
[size=1em]* 定义多个变量:
[size=1em]DATA: Player(35) TYPE C,
[size=1em] NickName(35),
[size=1em] Points TYPE I,
[size=1em] Games TYPE I VALUE '10',
[size=1em] Average(5) TYPE P,
[size=1em] Starter,
[size=1em] Acquired TYPE D.
|
1.2.2 初始值 在 ABAP 的8种基本类型中,每个类型都有其初始值。 在定义变量时,如果没有设置其默认值,或者使用CLEAR 语法清除变量时,系统都会将其恢复成初始值。 每个类型的初始值如下表所示: 类型 | 初始值 | 类型 | 初始值 | C | (blank) | N | zeroes | I | zero | D | 00000000 | P | zero | T | 000000 | F | zeroes | X | 00 |
在定义变量时,可以通过分配默认值,来初始化变量: [size=1em][size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
[size=1em]6
[size=1em]7
| [size=1em][size=1em]DATA: Player(35) TYPE C ,
[size=1em] NickName(35) VALUE 'Dr.J',
[size=1em] Points TYPE I,
[size=1em] Games TYPE I VALUE '10',
[size=1em] Average(5) TYPE P VALUE 10,
[size=1em] Starter VALUE 'Yes',
[size=1em] Acquired TYPE D VALUE '20100101'.
|
使用CLEAR语法,则会将变量恢复回初始值(上表所示)。如: [size=1em][size=1em]1
[size=1em]2
[size=1em]3
[size=1em]4
[size=1em]5
| [size=1em][size=1em]* 清除单个变量
[size=1em] CLEAR NickName.
[size=1em]* 清除多个变量
[size=1em] CLEAR: Points, Games, Average.
|
1.2.3 通过参考值定义(LIKE 语法) ABAP可以通过现有的类型,通过LIKE关键字,将已定义好的变量作为参考类型,作为新定义变量的类型。 语法:
DATA <Name1> LIKE <Name2> VALUE <default>.
如: [size=1em][size=1em]1
[size=1em]2
[size=1em]3
| [size=1em][size=1em]DATA: Player(35) TYPE C VALUE 'Julius Erving',
[size=1em] Nickname(35),
[size=1em] Acquired TYPE D.
|
使用LIKE定义同样类型的变量: [size=1em][size=1em]1
[size=1em]2
[size=1em]3
| [size=1em][size=1em]DATA: Player(35) TYPE C VALUE 'Julius Erving',
[size=1em] Nickname LIKE PLAYER,
[size=1em] Acquired LIKE SY-DATUM.
|
1.3 定义常量 语法:
CONSTANTS <name>(<length>) TYPE <data type> VALUE <value>.
通过关键字CONSTANTS 声明定义常量,与变量一样,区别在于: 常量定义时,必须分配默认值,且常量不能在程序中修改。 [size=1em][size=1em]1
[size=1em]2
[size=1em]3
| [size=1em][size=1em]CONSTANTS: TEAM1(20) TYPE C VALUE '76ers',
[size=1em] TEAM2 LIKE TEAM1 VALUE 'Celtics',
[size=1em] TOT_GAMES TYPE I VALUE 82.
|
1.4 自定义类型 上面提到,ABAP中有8种基本类型,ABAP也允许用户自定义类型,便于维护操作。 例如,不同字节长度字符串用途不同,如果需要定义不同的长度的C类型来操作,就可以通过自定义类型实现。 语法:
TYPES <name>(<length>) TYPE <data type>.
通过关键字 TYPES,自定义相关类型,然后在定义声明变量时,使用自定义的类型作为变量类型: [size=1em][size=1em]01
[size=1em]02
[size=1em]03
[size=1em]04
[size=1em]05
[size=1em]06
[size=1em]07
[size=1em]08
[size=1em]09
[size=1em]10
[size=1em]11
| [size=1em][size=1em]* 自定义类型
[size=1em]TYPES: NAME(35) TYPE C,
[size=1em] TEAMS(20) TYPE C.
[size=1em]* 使用自定义类型作为变量类型
[size=1em]DATA: PLAYER TYPE NAME VALUE 'Troy Aikman',
[size=1em] NICKNAME LIKE PLAYER.
[size=1em]* 使用自定义类型作为常量类型
[size=1em]CONSTANTS: TEAM1 TYPE TEAMS VALUE 'Cowboys',
[size=1em] TEAM2 LIKE TEAM1 VALUE 'Packers'.
|
1.5 数据输出 1.5.1 数据基本输出 ABAP 8种基本类型的标准输出长度及输出对齐方式,如下表所示: 类型 | 输出标准长度 | 对齐方式 | C | 自定义长度 | 左对齐 | I | 12位 | 右对齐 | P | (2 * 自定义长度 + )1 | 右对齐 | F | 22位 | 右对齐 | N | 自定义长度 | 左对齐 | D | 10位 | 左对齐 | T | 8位 | 左对齐 | X | (2*自定义长度) | 左对齐 |
通过WRITE关键词输出多个数据对象,然后通过反斜杠”/“ 进行换行输出: [size=1em][size=1em]01
[size=1em]02
[size=1em]03
[size=1em]04
[size=1em]05
[size=1em]06
[size=1em]07
[size=1em]08
[size=1em]09
[size=1em]10
[size=1em]11
[size=1em]12
| [size=1em][size=1em]DATA: FLOAT TYPE F VALUE ‘98.7654321E2’,
[size=1em] PACK TYPE P VALUE 12,
[size=1em] INT TYPE I VALUE 32.
[size=1em]WRITE FLOAT. "单独输出一个变量
[size=1em]WRITE: / FLOAT, "输出多个变量
[size=1em] / FLOAT EXPONENT 1 DECIMALS 3, "通过科学计数法并保留3位小数输出
[size=1em] / FLOAT EXPONENT 0 DECIMALS 2,
[size=1em] / PACK,
[size=1em] / PACK DECIMALS 1, "保留1位小数点输出
[size=1em] / INT DECIMALS 2. "保留2位小数点输出
|
输出结果: 9.876543210000000E+03 987.654E+01 9876.54 12 12.0 32.00
1.6 定义指针变量 ABAP中存在指针变量,指针变量定义后,不是通过变量来保存值,而是通过指针给变量分配源字段的内存地址。 一般多用于在与大量数据交互操作时,优化程序性能。 语法:
FIELD-SYMBOLS: <<name>> TYPE <data type>.
FIELD-SYMBOLS: <<name1>> LIKE <name2>.
通过关键字 ASSIGN 为指针分配值: [size=1em][size=1em]01
[size=1em]02
[size=1em]03
[size=1em]04
[size=1em]05
[size=1em]06
[size=1em]07
[size=1em]08
[size=1em]09
[size=1em]10
[size=1em]11
[size=1em]12
[size=1em]13
[size=1em]14
[size=1em]15
[size=1em]16
[size=1em]17
[size=1em]18
| [size=1em][size=1em]DATA: NUM TYPE I VALUE 12.
[size=1em]FIELD-SYMBOLS:
[size=1em] <f1>,
[size=1em] <f2> TYPE I,
[size=1em] <f3> LIKE NUM.
[size=1em]ASSIGN:
[size=1em] NUM TO <f1>,
[size=1em] NUM TO <f2>,
[size=1em] NUM TO <f3>.
[size=1em]WRITE: / ‘Line 1:’, NUM, <f1>, <f2>, <f3>.
[size=1em] <f1> = 32.
[size=1em]WRITE: / ‘Line 2:’, NUM, <f1>, <f2>, <f3>.
[size=1em]</f3></f2></f1></f1></f3></f2></f1></f3></f2></f1></f3></f2></f1>
|
输出结果:
Line 1: 12 12 12 12 Line 2: 32 32 32 32
需要注意的是,如若没有对指针分配值,却使用该指针时,语法检查时,可以通过; 但在运行程序时,会出现 Runtime Error 的错误。
|