ABAP(2) 定义数据
1、数据类型
当在ABAP中编程时,我们需要使用各种变量来存储各种信息,变量只是保留值的存储位置。这意味着,当创建一个变量,你在内存中保留一些空间,你可能希望存储各种数据类型的信息,如字符、整数、浮点等,基于变量的数据类型,操作系统分配内存并决定在保留内存中可以存储的内容。
01基本数据类型
ABAP为程序员提供了丰富的固定长度和可变长度数据类型,下表列出了ABAP基本数据类型
一些字段和数字可以使用一个活多个名称来修改,如下所示
- byte
- numeric
- character-like
下表显示数据类型,将值存储在内存中需要多少内存,以及可以存储在此类变量中的最小值和最大值。
- 数据定义
- 数据操作
- 数据展示
*DATA G_DATA01(10) TYPE C. *数据展示 |
在此示例中,我们有一个具有预定义长度40的C类型字符串,string时用于任何长度可变的字符串(文本字符串)的数据类型,类型string数据对象通常应用于固定长度不重要的字符内容。输出结果如下图:
date类型用于存储日期信息,并且可以存储八位数字,如上所示。
定义数据类型、长度的两种方式:
DATA G_DATA01(10) TYPE C.
DATA G_DATA01 TYPE C LENGTH 10.
02 定义初始值
DATA G_DATA01(10) TYPE C VALUE 'ABD'. WRITE: G_DATA01 NO-ZERO. |
2、复杂和参考数据类型
复杂类型分为结构类型和表类型。在结构类型中,基本类型和结构(即,嵌入在结构中的结构)被分组在一起。你可以只考虑基 本类型的分组。但是你必须意识到结构的嵌套的可用性。
当基本类型被分组在一起时,数据项可以作为分组数据项被访问或者可以访问各个基本类型数据项(结构字段)。表类型在其他编 程语言中更好地称为数组。数组可以是简单数组或结构数组。在ABAP中,数组被称为内部表,并且与其他编程语言相比,它们 可以以许多方式被声明和操作。下表显示了表示内部表的参数。
引用类型用于引用类,接口和运行时数据项的实例,ABAP OOP运行时类型服务(RTTS)允许在运行时声明数据项。
3、变量
变量是用于在程序的分配的存储区域中存储值的命名数据对象。顾名思义,用户可以在ABAP语句的帮助下更改变量的内容。
ABAP中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;可以存储在该存储器内的值的范围;以及可以应用于该变量的一组操作。
您必须先声明所有变量,然后才能使用它们。变量声明的基本形式是
DATA <f> TYPE <type> VALUE <val> |
这里<f>指定変量的名称。変量的名称最多可包含30个字符。
<type>指定変量的类型。具有完全指定的技木属性的任何数据类型被称为<type>。
<val>指定<f>的初始值。变量。在定义基本固定长度变量的情况下,DATA语句会自动使用类型特定的初始值填充变量的值。
< val>的其他可能值可以是文字,常量或显式子句,例如Is INITIAL。
以下是变量声明的有效示例。
DATA d1(2) TYPE C. DATA d2 LIKE d1. DATA minimum_value TYPE I VALUE 10. |
在上面的代码片段中,d1是C类型的变量,d2是d1类型的变量,minimum_value是ABAP整数类型的变量。 本章将解释ABAP中可用的各种变量类型。ABAP中有三种变量-
- Static Variables
- Reference Variables
- System Variables
3.1 静态变量
- ·静态变量在子程序,函数模块和静态方法中声明。
- ·生命周期与声明的上下文相关联。
- ·使用“CLASS-DATA"语句,可以在类中声明变量。
- ·“PARAMETERS"语句可用于声明链接到选择屏幕上的输入字段的基本数据对象。
- ·您还可以使用“SELECT-OPTIONS"语句声明在选择屏幕上链接到输入字段的内部表。
以下是命名变量时使用的约定:
- ·您不能使用特殊字符(例如“$"和“,")来命名变量。
- ·无法更改预定义数据对象的名称。
- ·变量的名称不能与任何ABAP关键字或子句相同。
- ·变量的名称必须传达变量的含义,而不需要进一步的评论。
- ·连字符被保留以表示结构的组件。因此,你应该避免在变量名中使用连字符。&&
- ·下划线字符可用于分隔复合词。
3.2 交互式变量
这个程序显示如何使用PARAMETERS语句声明一个变量:
PARAMETERS : NAME(01) TYPE C, CLASS TYPE I, SCORE TYPE P DECIMALS 2, CONNECT TYPE MARA-MATNR. |
这里,NAME表示10个字符的参数,CLASS表示整数类型的参数,默认大小(以字节为单位),SCORE表示具有最多两个小数位的值的打包类型参数, CONNECT是指ABAP字典的MARA-MATNF类型。 上面的代码产生以下输出:
3.3 参考变量
声明引用变量的语法是:
DATA <ref> TYPE REF TO <type> VALUE IS INITIAL. |
REF TO附带声明一个引用变量ref.
REF TO之后的规范指定了引用变量的静态类型
静态类型限制<ref> 的对象集合,可以参考.
引用变量的动态类型时它当前引用的数据类型和类
静态类型总是更加通用或与动态类型相同.
TYPE添加用于创建绑定引用类型和起始值,并且只能在VALUE添加后指定IS INITIAL.
CLASS C1 DEFINITION. |
在上面的代码片段中,声明了对象引用OREF和两个数据引用变量DREF1和DREF2。
这两个数据引用变量都是完全类型化的,可以使用取消引用运算符->*在操作数位置取消引用.
3.4 系统变量
- ABAP 系统变量可从所有ABA程序访问
- 这些字段实际上由运行时环境填充
- 这些字段中的值指示系统在任何给定时间点的状态
- 您可以在SAP中SYST表中找到系统变量的完整列表
- 可以使用SYST-或SY-访问SYST结构的各个字段.
WRITE: / 'SY-ABCDE', SY-ABCDE, /' SY-DATUM',SY-DATUM, /'SY-DBSYS',SY-DBSYS, /'SYHOST',SY-HOST, /'SY-LANGU',SY-LANGU, /'SY-MANDT',SY-MANDT, /'SY-OPSYS',SY-OPSYS, /'SAPRL',SY-SAPRL, /'SY-SYSID',SY-SYSID, /'SY-TCODE',SY-TCODE, /'SY-UNAME',SY-UNAME, /'SY-UZEIT',SY-UZEIT. |
执行结果
4、常量和字面量
- 文字是您在程序的源代码中创建的未命名数据对象。
- 他们完全由他们的价值定义。
- 您不能更改文字的值。
- 常量是通过使用声明性语句静态创建的命名数据对象。
- 通过为程序的存储区域中存储的值分配一个常量来声明该常量。
- 分配给常数的值在程序执行期间不能更改。
- 这些固定值也可以被视为文字。有两种类型的文字-数字和字符。
4.1 数字字面量
数字文字是可以有前缀符号的数字序列。
在数字文字中,没有十进制分隔符,也没有带尾数和指数的符号。
183. -97. +326. |
4.2 字符文字
- 字符文字是用单引号括起来的ABAP程序的源代码中的字母数字字符序列。
- 用引号括起来的字符文字具有预定义的ABAP类型C,并被描述为文本字段文字。
- 包含在“后引号"中的文字具有ABAP类型STRING,并且被描述为字符串文字。
- 字段长度由字符数定义。
注意·在文本字段文字中,尾随空白将被忽略,但在字符串文字中,它们将被考虑在内。
文本字段字面值
WRITE 'TUTORIALS POINT'. WRITE /'ABAP TUTORIAL'. |
字符串字面值
WRITE `TUTORIALS POINT`. WRITE /`ABAP TUTORIAL`. |
在上述两种情况下的输出相同,输入的符号略有不同
注意-当我们尝试更改常量的值时,可能会发生语法或运行时错误。
在类或接口的声明部分中声明的常量属于该类或接口的静态属性。
4.3 CONSTANTS 常量
我们可以在constants语句的帮助下声明命名的数据对象。
以下是语法
constants <f> TYPE <type> VALUE <val> |
CONSTANTS语句类似于DATA语句。
<f>指定常量的名称。TYPE<type>表示常数,其命名为<f>;其继承与现有数据类型<type>相同的技术属性。VALUE<val>为声明的常量 名<f>赋值一个初始值。
注意·我们应该使用CONSTANTS语句中的VALUE子句。子句“VALUE"用于在声明期间为常量赋予初始值。
我们有3种类型的常数,如基本,复杂和参考常数。以下语句显示如何使用CONSTANTS语句定义常量。
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'. WRITE: /'THE VALUE OF PQR IS:',PQR. |
执行结果
这里它涉及基本数据类型并且被称为基本常数。
下面时复常数的示例
BEGIN OF EMPLOYEE, NAME(25) TYPE C VALUE 'MANAGEMENT TEAM', ORGANIZATION(40) TYPE C VALUE 'TUTORIALS POINT LTD', PLACE(10)TYPE C VALUE 'INDIA', END OF EMPLOYEE |
在上面的代码片段中,EMPLOYEE是一个由NAME,organization和place字段组成的复杂常量。以下语句声明一个常量引用
CONSTANTS NULL_POINTER TYPE REF TO OBJECT VALUE IS INITIAL. |
我们可以在比较中使用常量引用,或者我们可以将其传递给过程。