SAP ABAP——数据类型(一)【数据类型概要及分类】

举报
Thunder Wang 发表于 2023/01/31 22:06:48 2023/01/31
【摘要】 本文主要介绍一下SAP ABAP中关于数据类型的概要以及分类,其中数据类型包括预定义的数据类型,数据字典数据类型,用户自定义数据类型,下面将依次对其进行讲解

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅文章概要:本文主要介绍一下SAP ABAP中关于数据类型的概要以及分类,其中数据类型包括预定义的数据类型,数据字典数据类型,用户自定义数据类型,下面将依次对其进行讲解。


🤟每日一言:宝剑锋从磨砺出,梅花香自苦寒来。


数据类型内涵

       数据类型描述了数据对象的技术属性(类型和长度),用于定义数据对象,并且本身不能被直接引用或赋值,是一种用来约束数据的解释

ps:数据对象是如(如文本、变量、常量),或者DATA 关键字用来声明的变量或者实体结构具有实际的内存空间


数据类型分类

数据类型分类 解释
预定义数据类型 SAP中预定义的数据类型(整数型、浮点型、文本型、日期型......)
数据字典数据类型 T-CODE SE11中定义的数据类型(包括数据元素,结构,表类型,数据库表,视图,类/接口)
用户自定义数据类型 用户程序中使用TYPES关键字自定义的数据类型

预定义数据类型

      预定义的数据类型包括两种,一种是在系统中已经预定义好的数据类型,在T-CODE:SE38 ABAP编辑器中定义数据对象时可以直接使用的,其中大致有如下最常用的8种:

数据类型 默认长度 有效长度 默认值 解释说明
I 4 4 0 整型
F 8 8 0 浮点型
P 8 1~16 0 压缩数类型(将两个十进制数字压缩到一个字节)
C 1 1~65535 '...' 文本型
D 8 8 '00000000' 日期型(YYYYMMDD)
N 1 1~65535 '0...0' 数字字符串类型(0~9之间的字符组成的数字字符串)
T 6 6 '000000' 时间类型(格式:HHMMSS)
STRING 0 ANY SPACE 字符串类型

       此外在T-CODE:SE11中定义数据元素时还有31种数据类型,它们是用于专门维护数据元素所使用的,列举如下:

a2572823558aec507e8c8f39294a6bd3.png

数据类型 简短描述
ACCP 过账期间YYYYMM
CHAR 字符串
CLNT 集团
CUKY 货币字段的货币码
CURR 采用BCD格式的货币字段
DF16_DEC 以BCD格式保存的十进制浮点数
DF16_RAW 以二进制数字形式保存的十进制浮点数
DF16_SCL 具有比例的十进制浮点数(已弃用)
DF34_DEC 以BCD格式保存的十进制浮点数
DF34_RAW 以二进制数字形式保存的十进制浮点数
DF34_SCL 具有比例的十进制浮点数(已弃用)
DATS 使用格式YYYYMMDD的日期
DEC 采用BCD格式的压缩数字
FLTP 浮点数
INT1 1字节整数,0到255
INT2 2字节整数,-32768到32767
INT4 4字节整数,-2147483648到2147483467
INT8 8字节整数
LANG 语言代码
LCHR 长字节串
LRAW 长字节字符串
NUMC 数字文本
PREC 过时数据类型
QUAN 采用BCD格式的数量字段
RAW 字节序列
RAWSTRING 字节字符串(BLOB)
SSTRING 字符串
STRING 字符串(CLOB)
TIMS 格式为HHMMSS的时间
UNIT 数量字段的单元码
VARC 过时数据类型

数据字典数据类型

        ABAP数据字典是定义和管理数据元素及数据库元素的中心工具,系统的所有全局数据类型以及数据库表结构等都需要在数据字典中创建和维护。数据字典保证了数据的完整性,一致性,安全性。

f8be40537fe24351552058acb1f321ce.png

数据字典类型 解释说明
数据元素 最基本的数据单位,没有结构,定义了数据库表中字段的描述,使用预定义的数据类型或参考类型对字段特征进行描述。
结构 由数据元素或者其他的数据类型组成的一个特定结构。与用户自定义的结构并无本质上的区别,只不过数据字典数据类型中的结构是全局性、永久性的,而用户自定义的结构是局部性、暂时性的。
表类型 TABLE类型的数据元素,可存放多行数据。与用户自定义的表类型并无本质上的区别,只不过数据字典数据类型中的表类型是全局性、永久性的,而用户自定义的表类型是局部性、暂时性的。
数据库表 数据库表是数据库中实际存放数据的地方,由行(记录)和列(字段)组成。在数据字典里可以创建数据库表,并且表中的列通过数据元素来定义。
视图 视图是一个或者多个数据库表的逻辑表现形式,它本身不存储数据。视图有4种类型:
1. Database view :对一张或者多张表按照连接条件和选择条件筛选后的数据显示的视图。连接条件自己定义.连接条件是inner join。一张表的视图可以维护数据,维护了视图之后,表的数据也改变。 多张表的视图只能显示。
2. Projection view:
数据来自一张表,用于屏蔽一些字段(一般用于保护数据时使用).
3. Maintenance view:
允许你进行对几个表的数据进行修改,参与连接的表必须存在外键,他们的连接条件是不能自定义的。要维护和显示数据必须要生成表格维护对话框(在“表格维护生成器”中维护),所有主键要在视图的字段里
4. Help view:
该类视图可以用搜索帮助的“selection method”中使用,参与连接表必须存在外键.


        以上所列举的全局数据字典数据类型在程序中都是可以直接被用来参照定义的。比如说在程序中数据库表可以被用来参照定义相同结构的表类型或者内表或者结构;数据库表中某一字段亦可被用来参照定义局部结构体类型或者局部结构体变量中的字段。总而言之,数据字典中的数据类型可以全局使用,并且可以被参照定义的方式有多种多样,读者可以自行去尝试!下面给出几段示例代码和效果

- 案例代码演示(参照数据库表定义)

DATA:GT_SFLIGHT TYPE TABLE OF SFLIGHT."参照数据库表SFLIGHT定义内表变量
     GS_SFLIGHT TYPE SFLIGHT. "参照数据库表SFLIGHT定义结构体变量

TYPES:TY_SFLIGHT TYPE SFLIGHT,    " 参照数据库表SFLIGHT定义结构体类型
      TY_TAB_SFLIGHT TYPE TABLE OF SFLIGHT. "参照数据库表SFLIGHT定义表类型

- 案例代码演示(参照数据库表字段定义)

DATA:BEGIN OF GS_SFLIGHT,"参照数据库表SFLIGHT字段定义结构体变量
      ZCARRID TYPE SFLIGHT-CARRID,
      ZCONNID TYPE SFLIGHT-CONNID,
      ZFLDATE TYPE SFLIGHT-FLDATE,
      ZPRICE  TYPE SFLIGHT-PRICE,
     END OF GS_SFLIGHT.

TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT字段定义结构体类型
        ZCARRID TYPE SFLIGHT-CARRID,
        ZCONNID TYPE SFLIGHT-CONNID,
        ZFLDATE TYPE SFLIGHT-FLDATE,
        ZPRICE  TYPE SFLIGHT-PRICE,
     END OF TY_SFLIGHT.

- 案例代码演示(参照数据元素定义)


要参照的数据元素如下蓝框所示:

0dae256a2ce9b9de3139545c0e89e30e.png

DATA:BEGIN OF GS_SFLIGHT,"参照数据库表SFLIGHT数据元素定义结构体变量
  ZCARRID TYPE S_CARR_ID,
  ZCONNID TYPE S_CONN_ID,
  ZFLDATE TYPE S_DATE,
  ZPRICE  TYPE S_PRICE,
END OF GS_SFLIGHT.

TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT数据元素定义结构体类型
  ZCARRID TYPE S_CARR_ID,
  ZCONNID TYPE S_CONN_ID,
  ZFLDATE TYPE S_DATE,
  ZPRICE  TYPE S_PRICE,
END OF TY_SFLIGHT.

用户自定义数据类型

           用户自定义的数据类型是指在程序内部定义的数据类型,是用户基于全局数据字典数据类型或者预定义数据类型再定义的新的类型,也可以是用户参照已经在程序中自定义的数据类型再定义的新的类型。这些类型只能在用户创建的程序内部可见,其他程序是不能访问到它们的。在程序中通过使用【TYPES】关键字来自定义数据类型,下面给出具体的案例代码:

- 案例代码演示(参照预定义数据类型定义结构体类型)

TYPES:BEGIN OF TY_TEST,"参照系统预定义数据类型定义结构体类型
  COL1 TYPE C,
  COL2 TYPE I,
  COL3 TYPE P,
  COL4 TYPE N,
  END OF TY_TEST.

- 案例代码演示(参照全局数据库表定义表类型和结构体类型)

TYPES:TY_TAB_VBAK TYPE TABLE OF VBAK,"参照数据库表VBAK定义表类型
      TY_VBAK TYPE VBAK. "参照数据库表VBAK定义结构体类型

- 案例代码演示(参照全局数据库表中字段定义结构体类型)

TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT字段定义结构体类型
            ZCARRID TYPE SFLIGHT-CARRID,
            ZCONNID TYPE SFLIGHT-CONNID,
            ZFLDATE TYPE SFLIGHT-FLDATE,
            ZPRICE  TYPE SFLIGHT-PRICE,
         END OF TY_SFLIGHT.

- 案例代码演示(参照全局数据元素定义结构体类型)

 TYPES:BEGIN OF TY_SFLIGHT, "参照数据库表SFLIGHT数据元素定义结构体类型
      ZCARRID TYPE S_CARR_ID,
      ZCONNID TYPE S_CONN_ID,
      ZFLDATE TYPE S_DATE,
      ZPRICE  TYPE S_PRICE,
    END OF TY_SFLIGHT.

- 案例代码演示(参照自定义结构体类型定义表类型)

TYPES:BEGIN OF TY_SFLIGHT,
  ZCARRID TYPE S_CARR_ID,
  ZCONNID TYPE S_CONN_ID,
  ZFLDATE TYPE S_DATE,
  ZPRICE  TYPE S_PRICE,
END OF TY_SFLIGHT.

 TYPES:TY_TAB_SFLIGHT TYPE TABLE OF TY_SFLIGHT."参照自定义的结构体类型TY_SFLIGHTS定义表类型




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。