SAP 数据类型

时间:2022-09-17 12:20:53

数据元素和基本类型对应关系

数据字典预置类型

ABAP类型

运行长度

说明

ACCP

N(6)

6

会计计算周期

CHAR

C(n)

1-255

字符

CLNT

C(3)

3

集团,数据区域代码

CUKY

C(5)

5

货币代码

CURR(n,m)

P((n+1)/2)DECIMALm

1-17

货币金额

DATS

D(8)

8

日期

DEC n,m

P((n+1)/2)DECIMALm

n(1-31)m(1-17)

数值计算

FLTP

F(8)

18

浮点数

INT1

X(1)(类型b)

3

单字节整形数

INT2

X(2)(类型s)

5

双字节整形数

INT4

X(4)(类型i)

10

四字节整形数

LANG

C(1)

内部1位外部2位

语言代码

LCHR

C(n)

256-最大值

长字符

LRAW

X(n)

256-最大值

长位字串

NUMC n

N(n)

1-255

数值文字

PREC

X(2)

16

精确度

QUAN n,m

P((n+1)/2)DECIMALm

1-17

数量

RAW n

X(n)

1-255

位字串

TIMS

T(6)

6

时间

VARC n

C(n)

255-最大值

长字符(仅3.0前可用)

STRING

STRING

1-最大值

字符串

RAWSTRING

XSTRING

1-最大值

位字符串

UNIT

C(n)

2-3

单位

ABAP基本数据类型

更多的类型请参考ABAP数据类型继承图

类型

允许最大长度(字符数)

默认长度(省略时采用)

说明

初始值

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

P类型(压缩型)数据

是一种压缩的定点数,其数据对象占据内存字节数和数值范围取定义时指定的整个数据大小和小数点后位数,如果不指定小数位,则将视为I类型。其有效数字位大小可以是从1~31位数字(小数点与正负号占用一个位置,半个字节),小数点后最多允许14个数字。

P类型的数据,可用于精确运算(这里的精确指的是存储中所存储的数据与定义时字面上所看到的大小相同,而不存在精度丢失问题——看到的就是内存中实实在在的大小)。在使用P类型时,要先选择程序属性中的选项 Fixed point arithmetic(即定点算法,一般默认选中),否则系统将P类型看用整型。其效率低于I或F类型。

"16 * 2 = 32表示了整个字面意义上允许的最大字面个数,而14表示的是字面上小数点后面允许的最大小数位,而不是指14个字节,只有这里定义时的16才表示16个字节

DATA: p(16) TYPE p DECIMALS 14 VALUE ‘12345678901234567.89012345678901‘.

"正负符号与小数点固定要占用半个字节,一个字面上位置,并包括在这16个字节里面。
"16 * 2 = 32位包括了小数点与在正负号在内
"在定义时字面上允许最长可以达到32位,除去小数点与符号需占半个字节以后
"有效数字位可允许31位,这31位中包括了整数位与小数位,再除去定义时小
"数位为14位外,整数位最多还可达到17位,所以下面最多只能是17个9
DATA: p1(16) TYPE p DECIMALS 14 VALUE ‘-99999999999999999‘.

"P类型是以字符串来表示一个数的,与字符串不一样的是,P类型中的每个数字位只会占用4Bit位,所以两个数字位才会占用一个字节。另外,如果定义时没有指定小数位,表示是整型,但小数点固定要占用半个字节,所以不带小数位与符号的最大与最小整数如下(最多允许31个9,而不是32个)
DATA: p1(16) TYPE p  VALUE ‘+9999999999999999999999999999999‘.
DATA: p2(16) TYPE p  VALUE ‘-9999999999999999999999999999999‘.

其实P类型是以字符串形式来表示一个小数,这样才可以作到精确,就像Java中要表示一个精确的小数要使用BigDecimal一样,否则会丢失精度。

DATA: p(9) TYPE p DECIMALS 2 VALUE ‘-123456789012345.12‘.
WRITE: / p."123456789012345.12-

DATA: f1 TYPE f VALUE ‘2.0‘,
      f2 TYPE f VALUE ‘1.1‘,
      f3 TYPE f.
f3  =  f1 - f2."不能精确计算
"2.0000000000000000E+00 1.1000000000000001E+00 8.9999999999999991E-01
WRITE: / f1   , f2 , f3.

DATA: p1 TYPE p DECIMALS 1 VALUE ‘2.0‘,
      p2 TYPE p DECIMALS 1 VALUE ‘1.1‘,
      p3 TYPE p DECIMALS 1.
p3  =  p1 - p2."能精确计算
"2.0               1.1               0.9
WRITE: / p1   , p2 , p3.

DATA: P TYPE P.

P = 1 / 3 * 3.

WRITE P.

如果未设置程序属性“定点算法”,则结果为 0,这是因为除法结果被内部取整为 0。

如果设置程序属性“定点算法”,则结果为 1,这是因为除法结果被内部存储 0.333333333333333333333333333333,精度达 31 位数字。

Java中精确计算:

publicstaticvoid main(String[] args) {

System.out.println(2.0 - 1.1);// 0.8999999999999999

System.out.println(sub(2.0, 0.1));// 1.9

}

publicstaticdouble sub(double v1, double v2) {

BigDecimal b1 = new BigDecimal(Double.toString(v1));

BigDecimal b2 = new BigDecimal(Double.toString(v2));

return b1.subtract(b2).doubleValue();

}

ABAP数据类型继承图

下图中左边展示了ABAP类型的继承关系(黄色表示类型、灰色表示可生成相应的数据),右边为通用数据类型(但只用在formalparameters(形式参数)与field symbols字段符号,Data通用类型只可用于定义data references变量,object通用类型只可用于定义object references变量)。

character-type:text fields (c)、numeric text fields (n)、date fields (d)、and time fields (t)、text string (string),相应的通用类型为clike

numeric-type:Integer (i)、floating point numbers (f)、and packed numbers (p),相应的通用类型为numeric.

byte-type:Byte fields (x)、byte string (xstring),相应的通用类型为xsequence.

通用类型

除了object,所有的通用类型都能直接用TYPE后面(如 TYPE data,但没有TYPE object,object不能直接跟在TYPE后面,只能跟在 TYPE REF TO后面)

TYPE REF TO 后面可接的通用类型只能是 data(数据引用)或者是 object(对象引用)通用类型,其他通用类型不行:

TYPE REF TO data :表示的是数据引用data references

TYPE REF TO object: 表示的是对象引用object references

ANY代表了除data、 object 任何数据类型

下表为ABAP预置的通用类型。ABAP数据类型继承图

Type

Description

any table

Internal table with any table type

hashed table

Hashed table

index table

Index table

sorted table

Sorted table

standard table

Standard table

table

Standard table

   

c

Text field with a generic length

n

Numeric text with generic length

p

Packed number with generic length and generic number of decimal places

x

Byte field with generic length

 

C、N、P、X用在Form的形式参数中

clike

Character-like (c, d, n, t, string, and character-like flat structures)

csequence

Text-like (c, string)

xsequence

Byte-like (x, xstring)

numeric

Numeric (i (b, s), p, decfloat16, decfloat34, f)

   

data

Any data type

any

Any data type

simple

基础数据类型,以及只包含character-like扁平组件的数据结构

Elementary data type including structured types with exclusively character-like flat components

object

Any object type (root class of the inheritance hierarchy继承层次结构)

   

字符类型C作为接口参数类型使用时,则传递的参数的长度可以是任意的,但如果采用C(XX)形式定义的,则传递进去的长度固定为XX。

如果字符符号定义成一般类型(通用类型)内表,则在使用时,你只能动态的访问各字段的名称:

TYPES: BEGIN OF line,
  col1,
  col2,
END OF line.
DATA: wa TYPE line,
itab TYPE HASHED TABLE OF line WITH UNIQUE KEY col1,
key(4) VALUE ‘col1‘.
FIELD-SYMBOLS <fs> TYPE ANY TABLE.
wa-col1 = ‘X‘.
wa-col2 = ‘Y‘.
INSERT wa INTO TABLE itab.
ASSIGN itab TO <fs>.
CLEAR: wa.
READ TABLE <fs> WITH TABLE KEY (key) = ‘X‘ INTO wa.
"编译会出错
*READ TABLE <fs> WITH TABLE KEY col1 = ‘X‘ INTO wa.
WRITE:/ sy-subrc, wa-col1, wa-col2.

因为上面的字段符号为ANY TABLE,行的结构类型不明确,所以不能静态的指定行的字段名。如果上面将字段符号定义成ANY或什么都不写是写时,根本就不可以使用READ TABLE这样的语句,原因是在静态编译的情况下,根本不为会它指向的是一个内表。

当使用完全限定类型定义字段符号时,可以静态的使用技术属性。如,某个结构的组件元素、循环某个内表、创建某个对象(引用类型的字段符号):

DATA: BEGIN OF line,
col1,
col2 VALUE ‘X‘,
END OF line.
FIELD-SYMBOLS <fs> LIKE line.
ASSIGN line TO <fs>.
MOVE <fs>-col2 TO <fs>-col1.
WRITE: / <fs>-col1,<fs>-col2.

INDEX/ANY TABLE通用型内表

除三种标准类型外,还有一般性类型,即索引表(INDEX TABLE)和任意表(ANY TABLE),一般性类型可以用于类型定义中,但不能用于声明一个内表对象,因为它并没有指明任何明确的表类型,因而系统无法确定对其操作方式。一般性类型还可以用于指明字段符号和接口参数的类型,其实际类型可能在运行期内才能够确定。

数据类型(TYPES)与数据对象(DATA)

数据类型有简单的基本类型,比如你用到的 I N C P等,也有根据这些基本类型自己定义的结构化数据类型,比如自己用types定义的,系统SE11创建件的结构

定义数据对象使用关键字data,定义数据类型使用关键字types

定义数据对象的时候两种常用的方式,一个是参考数据类型,一个是参考数据对象

参考数据类型的方式是使用type关键字,比如:data lv_str(10) type c.

参考数据对象的方式是使用like关键字,比如:data lv_str1 like lv_str.

你使用data关键字定义的typ_man,实际上是一个结构化的数据对象

参考数据对象定义gt_tb的时候,应该使用like,而不是type。

知识点(1)

数据字典预置类型 ABAP类型 运行长度 说明
ACCP N(6) 6 会计计算周期
CHAR C(n) 1-255 字符
CLNT C(3) 3 集团,数据区域代码
CUKY C(5) 5 货币代码
CURR(n,m) P((n+1)/2)DECIMALm 42736 货币金额
DATS D(8) 8 日期
DEC n,m P((n+1)/2)DECIMALm n(1-31)m(1-17) 数值计算
FLTP F(8) 18 浮点数
INT1 X(1)(类型b) 3 单字节整形数
INT2 X(2)(类型s) 5 双字节整形数
INT4 X(4)(类型i) 10 四字节整形数
LANG C(1) 内部1位外部2位 语言代码
LCHR C(n) 256-最大值 长字符
LRAW X(n) 256-最大值 长位字串
NUMC n N(n) 1-255 数值文字
PREC X(2) 16 精确度
QUAN n,m P((n+1)/2)DECIMALm 42736 数量
RAW n X(n) 1-255 位字串
TIMS T(6) 6 时间
VARC n C(n) 255-最大值 长字符(仅3.0前可用)
STRING STRING 1-最大值 字符串
RAWSTRING XSTRING 1-最大值 位字符串
UNIT C(n) 2~3 单位

数据定义: 知识点(2)

  1. TYPES:BEGIN OF t_staff,
  2. S_no(3) type n,
  3. Name(20),
  4. END OF t_staff.
  5. DATA staff TYPEt_staff.

定义了一个结构类型t_staff, 里面包含了 员工工号,员工姓名两个字段。并根据其声明了一个结构体对象staff.

结构比作人,社会赋予人人的各属性是这个结构的字段。

  1. TYPES:BEGIN OF HUMAN,
  2. ID(18)  TYPE N,  "身份证号码
  3. NAME(20),   "姓名
  4. AGE(2) TYPE N,  "年龄
  5. BOB  TYPE D, " 生日
  6. HIGE TYPE F,  "身高
  7. WIGHTH TYPE F, "体重
  8. END HUMAN.

知识点(3)

通用逻辑表达式列表:  把后面的英文记住了,这几个符号也就记住了。

运算符

意义

EQ或=

等于 (Equal)

NE或<>或><

不等于(NotEqual)

LT或<

小于(LESSTHAN)

LE或<=

小于等于(Less than orEqual to)

GT或>

大于(GreaterThan)

GE或>=

大于等于(Greater than orEqual to)

知识点(4)

types定义的并不是结构体对象,只是结构类型,不能作为工作区,当定义的内表没有表头行(工作区)时,必须为其定义一个结构体作为工作区,否则无法使用此内表.如果没有给内表定义工作区,则在定义内表时必须声明表头行(withheader line).

  1. DATA:BEGIN OFline, "work area(structure)结构类型且结构体对象
  2. num TYPE i,
  3. sqr TYPE i,
  4. END OF line,
  5. "无表头行内表,内表定义都使用data关键词.
  6. itab TYPE(LIKE)STANDARD TABLE OF line WITH KEY table_line.

DATADIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.定义标准内表

知识点(5)

1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.

2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE,不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.

知识点(6)

注:CLEAR itab[].表示操作的是内表对象.而CLEAR
itab.当itab有表头行时表示操作表头行,如无表头行时表示操作内表对象.

内表分有表头的内表和没表头的内表。

clear itab 和clear itab[] 是有区别的,clear itab[] 操作两种情况的内表。clear itab 操作的是当内表有表头时,操作表头;没表头时,操作内表对象。这样理解对吗?

理解错了,CLEARitab[].:只清空整个内表对象数据.不清空表头行

知识点(7)

下面这个很难理解,我都看了5遍了。

控制级操作(用于总计,缩进,格式控制等)

AT FIRST|LAST|NEW f|END OF f.

<statement block>

ENDAT.

说明:

l  FIRST:当循环为内表的第一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.

l  LAST:当循环为内表的最后一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.

l  NEW f:字段f前面(即左边)的全部字段内容之一不同于上一行时,执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.

l  END OF f:如果下一行行组中的任何字段内容不同于上一行,执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.

注:在控制级操作期间,在工作区中,对于非标准关键词段,将全部进行初始化,在执行完控制操作后(即ENDAT语句后)工作区中的数据将全部还原到进入控制级操作语句前(即进入AT前)状态.

知识点(8)

FOR ALL ENTRIES IN ITAB  ”相当于循环输出内表在WHERE子句中出现的  
意义相当于where子句。

SAP 数据类型的更多相关文章

  1. &lbrack;SAP ABAP开发技术总结&rsqb;预定义(内置)数据类型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. 【ABAP系列】SAP ABAP与Java数据类型的对应关系

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP与Java数据类 ...

  3. 【ABAP系列】SAP ABAP基础-abap数据类型的解析整理

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP基础-abap数 ...

  4. 五十八、SAP中常用预定义数据类型

    一.SAP中常用预定义数据类型 注意事项如下: 1.默认的定义数据类型是CHAR. 2.取值的时候C型默认从左取,N型从右取,超过定义长度则截断. 3.C类型,可以赋值数值,也可以赋值字符,还可以混合 ...

  5. 四、SAP中转义字符的使用和不同数据类型所占长度不同

    一.代码如下: 效果如下,注意看,数字类型占用了10个位置:

  6. SAP自定义权限对象

    SAP系统自带了很多的权限对象,每一个运行画面都有非常多的权限用到.不过标准的权限对象并不一定适合于用在客户自己开发的程序里面,所以每个ABAPer都应该会自己开发一套权限对象,并引用在程序代码里面. ...

  7. 学习SAP HANA SQL

      学习SAP HANA SQL 语句(创建 EMP,DEPT,BONUS 和 SALGRADE测试表)--像学Oracle一样学习SAP HANA 标签: sap测试oraclesqltableda ...

  8. ABAP开发顾问必备:SAP ABAP开发技术总结

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. &lbrack;SAP ABAP开发技术总结&rsqb;ABAP调优——代码优化

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. 【BZOJ-3747】Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 715  Solved: 294[Submit][Stat ...

  2. flash

    1. 1.这种方式已经比较旧了, 2. html.push('<div class="flash-ad" style = "position:relative&qu ...

  3. Semiconnected--强连通缩点

    1451: Semiconnected 时间限制: 1 Sec  内存限制: 32 MB 提交: 79  解决: 20 题目描述 For a directed graph G = (V, E), if ...

  4. BZOJ3482 &colon; &lbrack;COCI2013&rsqb;hiperprostor

    对于每组询问,spfa求出f[i][j]表示从S出发,经过j条x边到达i的最短路. 若f[T][i]都为inf,则无解. 若f[T][0]为inf,则有无穷个解. 否则可以看作若干条直线,$O(n)$ ...

  5. Count the string - HDU 3336(next&plus;dp)

    题目大意:给你一个串求出来这个串所有的前缀串并且与前缀串相等的数量,比如: ababa 前缀串{"a", "ab", "aba", &quo ...

  6. &period;NET MongoDB Driver 2&period;2 API注释

    主要内容 1 MongoClient 1.1构造函数 1.2 方法 2 IMongoDatabase 3 IMongoCollection 4 IMongoCollectionExtensions 5 ...

  7. SLAM中的变换(旋转与位移)表示方法

    1.旋转矩阵 注:旋转矩阵标题下涉及到的SLAM均不包含位移. 根据同一点P在不同坐标系下e(e1,e2,e3)e'(e1',e2',e3')的坐标a(a1,a2,a3)a'(a1',a2',a3') ...

  8. python110道面试题

    1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 3.列出5个python标准库 os:提供了不少与操作系统相关联的函数 s ...

  9. zabbix 模板 创建逻辑 &plus; 主动模式-被动模式

    模板通常包含了item.trigger.graph(图形).application以及low-level discovery rule:模板可以直接链接至某个主机: 模板包含一系列的item,trig ...

  10. vue 组件间的通信

    (1)props:用于父组件向子组件传递消息 使用方法: 在父组件中,使用子组件时,<Child v-bind:data="data"/>,通过v-bind把子组件需要 ...