SAP ABAP——数据类型(二)【TYPES自定义数据类型详解】

简介: 在上一文 SAP ABAP——数据类型(一)【数据类型概要及分类】我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!

在上一文

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

介绍了SAP ABAP中数据类型的概要以及分类,我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!


定义单一类型

参照预定义数据类型定义

TYPES:CHAR_10 TYPE CHAR10, "10位字符串
       CHAR_20 TYPE C LENGTH 20, "20位字符串
       P_8_2   TYPE P LENGTH 8 DECIMALS 2. "16位数字型变量,两位小数

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义普通单一类型的示例代码:


参照数据库表字段定义

TYPES:ZCARRID TYPE SFLIGHT-CARRID,
      ZCONNID TYPE SFLIGHT-CONNID,
      ZFLDATE TYPE SFLIGHT-FLDATE,
      ZPRICE  TYPE SFLIGHT-PRICE.

数据库表sflight如下:

dac2a325f73186f3270614978c5ccaa.png


参照数据元素定义

TYPES:ZCARRID TYPE S_CARR_ID,
       ZCONNID TYPE S_CONN_ID,
       ZFLDATE TYPE S_DATE,
       ZPRICE  TYPE S_PRICE.

使用的数据元素为上述数据库表sflight中所定义好的:

b9bf4829406540b8c0ee1e78125ddd5.png


参照数据字典结构中组件定义

TYPES: ZFIELDNAME TYPE /EACA/O_CHAR_T-FIELDNAME.

数据字典结构/EACA/O_CHAR_T如下:

df9440569f849f7823a9bdd332e6652.png


参照类/接口定义

TYPES:WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       WCL_ALV       TYPE REF TO CL_GUI_ALV_GRID.

参照用户已定义数据类型再定义

         下面的示例代码首先各选取了上述各一个例子进行用户自定义类型,然后再分别参照自定义类型再定义相同的类型,后缀为【_copy】,展示如何参照用户已定义数据类型再定义:

*首先进行自定义数据类型:
TYPES:CHAR_10 TYPE CHAR10,
      ZCARRID TYPE SFLIGHT-CARRID,
      ZCONNID TYPE S_CONN_ID,
      ZFIELDNAME TYPE /EACA/O_CHAR_T-FIELDNAME,
      WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
*然后分别参照上面已定义的数据类型在定义:
TYPES:CHAR_10_COPY       TYPE CHAR_10,
      ZCARRID_COPY       TYPE ZCARRID,
      ZCONNID_COPY       TYPE ZCONNID,
      ZFIELDNAME_COPY    TYPE ZFIELDNAME,
      WCL_CONTAINER_COPY TYPE WCL_CONTAINER.

定义结构体类型

参照预定义数据类型定义

TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义结构体类型的示例代码:


参照数据库表字段定义

TYPES:BEGIN OF TY_SFLIGHT,
       ZCARRID  TYPE SFLIGHT-CARRID,
       ZCONNID  TYPE SFLIGHT-CONNID,
       ZFLDATE  TYPE SFLIGHT-FLDATE,
       ZPRICE   TYPE SFLIGHT-PRICE,
     END OF TY_SFLIGHT.

数据库表sflight如下:

79b39afa490c3bf0fc72b6951a08c78.png


参照数据元素定义

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:BEGIN OF TY_/EACC/YS_WA_JOURNAL,
       ZPST_DAT        TYPE /EACC/YS_WA_JOURNAL-PST_DAT,
       ZACC_SYSTEM     TYPE /EACC/YS_WA_JOURNAL-ACC_SYSTEM,
       ZBUS_TRANS_CAT  TYPE /EACC/YS_WA_JOURNAL-BUS_TRANS_CAT,
       ZITEM_CAT       TYPE /EACC/YS_WA_JOURNAL-ITEM_CAT,
       ZJOURNAL        TYPE  /EACC/YS_WA_JOURNAL-JOURNAL,
     END OF TY_/EACC/YS_WA_JOURNAL.

数据字典结构/EACC/YS_WA_JOURNAL如下:

83a47d21c53e015bd5b308c39ac7058.png


参照数据字典结构定义

TYPES:TY_/EACC/YS_WA_JOURNAL TYPE /EACC/YS_WA_JOURNAL.

参照类/接口定义

TYPES:BEGIN OF TY_ALV,
       WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       WCL_ALV       TYPE REF TO CL_GUI_ALV_GRID,
      END OF TY_ALV.

参照用户已定义数据类型再定义

         下面的示例代码首先各选取了上述各一个例子进行用户自定义类型,然后再分别参照自定义类型再定义相同的类型,后缀为【_copy】,展示如何参照用户已定义数据类型再定义:

TYPES:BEGIN OF TY_TEST,
       TEA_NAME               TYPE C LENGTH 10,
       ZCARRID                TYPE SFLIGHT-CARRID,
       ZCONNID                TYPE S_CONN_ID,
       ZPST_DAT               TYPE /EACC/YS_WA_JOURNAL-PST_DAT,
       GS_/EACC/YS_WA_JOURNAL TYPE /EACC/YS_WA_JOURNAL,
       WCL_CONTAINER          TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
     END OF TY_TEST.
TYPES: TY_TEST_COPY TYPE TY_TEST."参照自定义的结构TY_TEST再定义

定义内部表类型(标准表,排序表,哈希表)

参照全局数据字典类型定义

         下面列举了最常见的参照全局数据字典类型定义表类型的示例代码:其中关于内表的三种表类型将在后续章节【内表】中进行更加详细的讲解!


参照数据库表定义

*定义标准表类型
TYPES: TY_TAB_SFLIGHT  TYPE TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT1 TYPE STANDARD TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT2 TYPE TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE,
       TY_TAB_SFLIGHT3 TYPE STANDARD TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE.
*定义排序表类型
TYPES: TY_TAB_SFLIGHT4  TYPE SORTED TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT5 TYPE SORTED TABLE OF SFLIGHT WITH UNIQUE KEY CARRID CONNID FLDATE,
       TY_TAB_SFLIGHT6 TYPE SORTED TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID CONNID FLDATE.
*定义哈希表类型
TYPES: TY_TAB_SFLIGHT7  TYPE HASHED TABLE OF SFLIGHT ,
       TY_TAB_SFLIGHT8 TYPE HASHED TABLE OF SFLIGHT WITH UNIQUE KEY CARRID CONNID FLDATE.

参照数据字典表类型定义

TYPES: TY_TAB_HRPERNR  TYPE  HRAHQ_PERNR_TABLE .

PS:【TYPE】后面跟全局的表类型(标准表、排序表、哈希表),所以不需要使用【TYPE [STANDARD|SORTED|HASHED] TABLE OF】语句


参照数据字典结构定义内部表类型

*定义标准表类型
TYPES:  TY_TAB_/EACC/YS_WA_JOURNAL  TYPE TABLE OF /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL1 TYPE STANDARD TABLE OF /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL2 TYPE TABLE OF /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.
        TY_TAB_/EACC/YS_WA_JOURNAL3 TYPE STANDARD TABLE OF /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.
*定义排序表类型
TYPES:  TY_TAB_/EACC/YS_WA_JOURNAL4  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL ,
        TY_TAB_/EACC/YS_WA_JOURNAL5  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL WITH UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT,
        TY_TAB_/EACC/YS_WA_JOURNAL6  TYPE SORTED TABLE OF  /EACC/YS_WA_JOURNAL WITH NON-UNIQUE KEY 
PST_DAT ACC_SYSTEM BUS_TRANS_CAT.
*定义哈希表类型
TYPES: TY_TAB_/EACC/YS_WA_JOURNAL7 TYPE HASHED TABLE OF /EACC/YS_WA_JOURNAL ,
       TY_TAB_/EACC/YS_WA_JOURNAL8 TYPE HASHED TABLE OF /EACC/YS_WA_JOURNAL WITH UNIQUE KEY PST_DAT 
ACC_SYSTEM BUS_TRANS_CAT.

数据字典结构/EACC/YS_WA_JOURNAL如下:

9c08ebf7466d033560a18b87ccbd4aa.png


参照用户已定义数据类型再定义

         下面列举了两种参照自定义数据类型再定义表类型的示例代码:一种方法是参照自定义结构再定义,另一种方法是参照自定义表类型再定义


参照自定义结构类型再定义

*定义标准表类型
TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.
*定义标准表类型
TYPES: TY_TAB_CLASS  TYPE TABLE OF TY_CLASS ,
       TY_TAB_CLASS1 TYPE STANDARD TABLE OF TY_CLASS ,
       TY_TAB_CLASS2 TYPE TABLE OF TY_CLASS WITH NON-UNIQUE KEY  TEA_ID STU_ID,
       TY_TAB_CLASS3 TYPE STANDARD TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID.
*定义排序表类型
TYPES: TY_TAB_CLASS4 TYPE SORTED TABLE OF TY_CLASS ,
       TY_TAB_CLASS5 TYPE SORTED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS6 TYPE SORTED TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID.
*定义哈希表类型
TYPES: TY_TAB_CLASS7  TYPE HASHED TABLE OF TY_CLASS ,
       TY_TAB_CLASS8 TYPE HASHED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID.

参照自定义内部表类型再定义

*先定义结构
TYPES:BEGIN OF TY_CLASS,
       TEA_NAME TYPE C LENGTH 10,
       TEA_ID   TYPE N LENGTH 8,
       STU_NAME TYPE C LENGTH 10,
       STU_ID   TYPE N LENGTH 8,
     END OF TY_CLASS.
*定义标准表类型
TYPES: TY_TAB_CLASS      TYPE STANDARD TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY TYPE TY_TAB_CLASS ."参照已定义的标准表类型TY_TAB_CLASS再定义
*定义排序表类型
TYPES: TY_TAB_CLASS1      TYPE SORTED TABLE OF TY_CLASS WITH NON-UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS2      TYPE SORTED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY1 TYPE TY_TAB_CLASS1, "参照已定义的排序表类型TY_TAB_CLASS1再定义
       TY_TAB_CLASS_COPY2 TYPE TY_TAB_CLASS1. "参照已定义的排序表类型TY_TAB_CLASS2再定义
*定义哈希表类型
TYPES: TY_TAB_CLASS3      TYPE HASHED TABLE OF TY_CLASS WITH UNIQUE KEY TEA_ID STU_ID,
       TY_TAB_CLASS_COPY3 TYPE TY_TAB_CLASS3 . "参照已定义的哈希表类型TY_TAB_CLASS3再定义

定义RANGE表类型

TYPES: <rtype> TYPE RANGE OF <type> [INITIAL SIZE n].

案例代码演示

TYPES:ty_range     TYPE c LENGTH 10,
      ty_range_tab TYPE RANGE OF ty_range.
DATA:gv_range TYPE ty_range_tab.

效果演示

         上面给出了定义RANGE表类型的代码示例,并且最后使用了【DATA】语句将结构体类型实例化并且加入断点进行观察,RANGE表结构如下图所示:

f89a2b2786eab142ba222969392c420.png


目录
相关文章
|
3月前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
|
3月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
3月前
|
SQL 负载均衡 监控
SAP ABAP DBSQL_SQL_ERROR 错误
SAP ABAP DBSQL_SQL_ERROR 错误
|
3月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
3月前
|
SQL 监控 Oracle
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
|
3月前
|
存储 前端开发 Linux
在 SAP ABAP 系统里访问 FTP 服务器
在 SAP ABAP 系统里访问 FTP 服务器
|
3月前
|
存储 前端开发 应用服务中间件
使用 SAP ABAP 执行 FTP 操作
使用 SAP ABAP 执行 FTP 操作
|
3月前
|
BI 网络安全
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
|
3月前
|
监控 安全 应用服务中间件
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original