ABAP 开发系列(04): ABAP数据类型与数据对象

ABAP Programming Language 的内容主要有:

1.数据类型与数据对象

2.内表和内表结构(Internal Table)

3.数据流控制语句

4.模块化(Modularization)

 

1.数据类型与数据对象

1.1 ABAP元素数据类型

ABAP元素数据基本类型有以下8种:

类型 描述 长度 标准长度
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 关键字后加上冒号“:”.

例如:

* 定义单个变量:
DATA Person(35) TYPE C.

* 定义多个变量:
DATA:  Player(35)  TYPE C,
       NickName(35),
       Points	   TYPE I,
       Games       TYPE I  VALUE '10',
       Average(5)  TYPE P,
       Starter,
       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

在定义变量时,可以通过分配默认值,来初始化变量:

DATA:  Player(35)  TYPE C ,
       NickName(35)   VALUE 'Dr.J',
       Points      TYPE I,
       Games       TYPE I VALUE '10',
       Average(5)  TYPE P VALUE 10,
       Starter     VALUE 'Yes',
       Acquired    TYPE D VALUE '20100101'.

 
使用CLEAR语法,则会将变量恢复回初始值(上表所示)。如:

* 清除单个变量
   CLEAR  NickName.

* 清除多个变量
   CLEAR: Points, Games, Average.

 
 

1.2.3 通过参考值定义(LIKE 语法)

ABAP可以通过现有的类型,通过LIKE关键字,将已定义好的变量作为参考类型,作为新定义变量的类型。

语法:

DATA  <Name1> LIKE  <Name2> VALUE <default>.

如:

DATA: Player(35) TYPE C  VALUE 'Julius Erving',
      Nickname(35),
      Acquired   TYPE D.

使用LIKE定义同样类型的变量:

DATA: Player(35) TYPE C VALUE 'Julius Erving',
      Nickname   LIKE PLAYER,
      Acquired   LIKE SY-DATUM.

 
 

1.3 定义常量

语法:

CONSTANTS  <name>(<length>) TYPE <data type> VALUE <value>.

通过关键字CONSTANTS 声明定义常量,与变量一样,区别在于:

常量定义时,必须分配默认值,且常量不能在程序中修改。

CONSTANTS: TEAM1(20) TYPE C     VALUE '76ers',
           TEAM2     LIKE TEAM1 VALUE 'Celtics',
           TOT_GAMES TYPE I     VALUE 82.

 
 

1.4 自定义类型

上面提到,ABAP中有8种基本类型,ABAP也允许用户自定义类型,便于维护操作。

例如,不同字节长度字符串用途不同,如果需要定义不同的长度的C类型来操作,就可以通过自定义类型实现。

语法:


TYPES  <name>(<length>) TYPE <data type>.

通过关键字 TYPES,自定义相关类型,然后在定义声明变量时,使用自定义的类型作为变量类型:

* 自定义类型
TYPES:  NAME(35)  TYPE C,
        TEAMS(20) TYPE C.

* 使用自定义类型作为变量类型
DATA: PLAYER   TYPE NAME   VALUE 'Troy Aikman',
      NICKNAME LIKE PLAYER.

* 使用自定义类型作为常量类型
CONSTANTS: TEAM1  TYPE TEAMS VALUE 'Cowboys',
           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关键词输出多个数据对象,然后通过反斜杠”/“ 进行换行输出:

DATA: FLOAT TYPE F VALUE ‘98.7654321E2’,
      PACK  TYPE P VALUE 12,
      INT   TYPE I VALUE 32.

WRITE FLOAT.			 "单独输出一个变量

WRITE:	/ FLOAT,		 "输出多个变量
        / FLOAT EXPONENT 1  DECIMALS 3,	  "通过科学计数法并保留3位小数输出
        / FLOAT EXPONENT 0  DECIMALS 2,
        / PACK,
        / PACK DECIMALS 1,	 "保留1位小数点输出
        / 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 为指针分配值:

DATA:  NUM TYPE I VALUE 12.

FIELD-SYMBOLS: 
    ,
     TYPE I,
     LIKE NUM.

ASSIGN:	
    NUM TO ,
    NUM TO ,
    NUM TO .

WRITE: / ‘Line 1:’, NUM, , , .

  = 32.

WRITE: / ‘Line 2:’, NUM, , , .

输出结果:
Line 1: 12         12     12     12

Line 2: 32         32     32     32

 

需要注意的是,如若没有对指针分配值,却使用该指针时,语法检查时,可以通过;

但在运行程序时,会出现 Runtime Error 的错误。

 
 
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>