分类:
2009-07-17 07:53:06
ABAP/4数据声明语法
1、数据类型及其属性
ABAP/4中按结构和定义对数据类型分类。数据类型是 :
(1)基本的(非结构化的)或结构化的;
(2)预定义的或用户定义的。
基本的(非结构化的)或结构化的:
C:Text(文本),1字节,1-max字节;
D:Data YYYYMMDD(日期),8字节,8字节;
F:Floating point no.(浮点数),标准长度与机器有关,1-16字节;
I:Integer(整型),标准长度与机器有关,1-16字节;
N:Numberic Text(数字文本),1字节,1-max字节;
P:Packed number(压缩号),标准长度为8字节,允许长度为1-16字节(以下类似);
T:Time HHMMSS(时间),6字节,6字节;
X:Hexadecimal(十六进制),1字节,1-max字节。
等数据类型,其中max为近似64000字节;在P类型字段中,一个字节存储两位数字,符号位存储在最后半个字节中,类型I定义为二进制数,取值范围为从-21477483648至21477483647;一般来说,类型I用于计数器等,类型P用于商业计算,类型F用于数学计算,ABAP/4的数据域不得超过64000字节。
用户定义的基本数据类型完全是以预定义的基本数据类型为基础的。要定义自己的基本数据类型,请使用TYPES语句。
用户定义的基本数据类型使程序的阅读和维护更加容易:
语法:
TYPES
例:
TYPES: SURNAME(20) TYPE C,
BEGIN OF ADDRESS,
NAME TYPE SURNAME,
....
END OF ADDRESS.
DATA: ADDRESS_1 TYPE ADDRESS,
ADDRESS_2 TYPE ADDRESS,
示例说明如何使用参数TYPE直接引用用户定义的数据类型。其中主要有三件事情。第一,创建长为20、类型为C的用户定义的数据类型 SURNAME。第二,定义结构化数据类型ADDRESS。将数据类型SURNAME赋给ADDRESS、ADDRESS-NAME的组件。第三,创建作为字段串的数据对象ADDRESS_1、ADDRESS_2...,将它们的类型指定为ADDRESS。
2、变量用于以一定名称按一定格式保存并参考数据。变量可能在下列方面不同:名称、类型、长度、结构。
3、常量的定义
常量是包含 值的数据对象,该值是在初始化时确定的。在程序执行期间不能更改常量。ABAP/4能够识别的常量有数字常量与文本常量两种,数字常量主要有数据类型P与I两种,文本常量主要有数据类型C与N,而其余的数据类型由于没有规定常量,则一律使用文本常量。注意,如果你要把一个带有小数点的字段值赋给字段类型P,那么你必须首先把它定义为文本串(如"2.17")。
如果在程序中频繁地需要某特殊数值,请使用常量在这种情况下,请勿使用文字。如果需要修改该值,只须更改声明。
4、数据的声明
,数据的名称与变量的名称一样也有其命名规则。一般数据名称总是以字母作为首字符,余下的字符可以为字母也可以为数字,但除了可以使用下划线以外,不得使用任何其它特殊字符(和C/C++标识符一样,字母,数字,下划线,数字不在开头),并且长度不得超过30字节。另外,需要注意的是SPACE是预定义的字段,在ABAP/4语句中,参数名(即关键字的名字)不可以用作字段名。
可以在程序 中使用 DATA 语句的基本 格式以定义 内部变量。语法如下:
语法: DATA
基本格式中 ,关键字 DATA 有下列参数 :
用于字段串的DATA语句:
字段串是程序中的一组内表。要声明字段串,请使用DATA语句并用BEGIN OF和END OF标记该字段组的起始和结束。语法如下:
语法:
DATA: BEGIN OF
..............
END OF
这些语句定义了字段串
例:
DATA: BEGIN OF ADDRESS,
NAME(20) TYPE C,
STREET(20) TYPE C,
NUMBER TYPE P,
POSTCODE(5) TYPE N,
CITY(20) TYPE C,
END OF ADDRESS.
该示例定义了一个长度为73 的字段串ADDRESS。 可以通过ADDRESS-NAME、ADDRESS-STREET等定址组件。
在声明数据时,如果没有指定类型,就缺省使用类型C;如果没有规定长度,那么就使用该类型的缺省长度,在声明字段名时,你也可以赋予字段相应的初始值(使用参数VALUE),当然在在VALUE后面,你仅可以指定常量。在声明同一类型的字段时,可以使用LIKE参数,被参照的字段既可以是内部字段,也可以是数据库中的字段。
如果你使用参数来书写程序,那么该程序是很容易修改的,这是因为如果数据属性发生更改的话,你仅须在程序的一个地方进行改动,其它使用LIKE参数定义的数据其定义会自动发生改变。
CLEAR语句可以把字段的值设置为与其类型相符的初始值,或者设置为数据字典中定义的初始值,需要注意的是CLEAR语句不会保存以VALUE参数所规定的初始值。在输出特定类型的字段时,如果在输出字段的输出格式中没有指定长度,就缺省使用标准输出长度。
如果在输出格式中规定的长度超出了必须的长度,那么输出的值根据所规定的输出长度的具体数值或者左对齐或者右对齐。
在类型P或者I的字段值输出时,先导的零被转换为空格,在千位数之间插入逗号。
5、赋值
有许多ABAP/4语句可以用来给字段赋值,两个最为重要的是MOVE与COMPUTE语句, ,如果字段的类型与长度不匹配所赋的值,那么系统就会自动执行类型转换。另外,可以使用ADD、SUBSTRACT、MULTIPLY与DIVIDE语句进行简单的算术计算。类型转换的规则是这样的:如果类型C的字段值赋给类型P的字段,那么类型C的字段值仅允许+/-以及小数点。如果类型P的字段值赋给类型C的字段,那么就要格式化该数字值并且先导的零被转换为空格,当然如果你不要这种格式化的类型,那么你可以使用UNPACK语句;
可以在声明语句和操作语句中给数据对象赋值。
在声明语句中,将初始值赋给声明的数据对象,可以在DATA、常量和STATIC语句中使用VALUE参数。
在操作语句中给数据对象赋值可以使用MOVE语句和WRITE TO语句。
1、MOVE语句赋值(赋值运算符=)
(1)基本赋值操作
语法:MOVE
其中
(2)用指定偏移量赋值
语法:MOVE
将字段
(3)在字段串组件之间复制值
语法:MOVE-CORRESPONDING
2、WRITE TO语句赋值
语法:WRITE
将源字段
WRITE TO 语句总是检查用户主记录中的设置 。例如,这些设置指定是将小数点 显示为句号(.),还是逗号(,) 。
WRITE TO 语句并不遵循类型转换中所述的转换规则。目标字段解释为类型 C 字段。系统总是将源字 段内容转换为类型 C,它不将结果字符串转换为目标字段的数据类型,而直接写入目标字段。因此,不应使用数值数据类型的目标字段。
WRITE (
WRITE