SAP ABAP——数据类型(五)【LIKE系列关键字】

简介: 本文主要介绍一下SAP ABAP中的声明数据类型的LIKE系列关键字,主要包括了LIKE、LIKE TABLE OF、LIKE LINE OF、LIKE REF TO。LIKE系列语句是与TYPE系列所对应的语句,前者主要是参照数据类型进行定义,而后者则是参照实例化的数据对象进行定义,在下一章中笔者将对数据对象进行详细的讲述。

本文主要介绍一下SAP ABAP中的声明数据类型的LIKE系列关键字,主要包括了LIKE、LIKE TABLE OF、LIKE LINE OF、LIKE REF TO。LIKE系列语句是与TYPE系列所对应的语句,前者主要是参照数据类型进行定义,而后者则是参照实例化的数据对象进行定义,在下一章中笔者将对数据对象进行详细的讲述。


LIKE

         LIKE是与TYPE所对应的关键字,主要是参照数据对象进行定义。但是TYPE与LIKE这两个定义数据类型的主要关键字有时也可以进行混用。下面给出几个示例,让我们一起观察一下:

参照自定义内表类型

分别依次解除下面代码中第一行和第二行的注释,进行语法检查并进行观察:

*TYPES: ty_tab_sflight TYPE TABLE OF sflight WITH NON-UNIQUE KEY carrid.
*DATA: ty_tab_sflight TYPE TABLE OF sflight WITH NON-UNIQUE KEY carrid.
TYPES:ty_tab_sflight_copy1 TYPE  ty_tab_sflight,
      ty_tab_sflight_copy2 LIKE  ty_tab_sflight.

d1e700895e554f7be3bb7759caf7d67.png


         从上面的结果我们可以看出:在参照自定义内表类型定义数据类型时,TYPE参照数据类型时不会报错,参照数据对象时会报错;LIKE参照数据类型时会报错,但是参照数据对象不会报错。


参照单一类型

分别依次解除下面代码中第一段代码块和第二段代码块的注释,进行语法检查并进行观察:

*TYPES: col1 TYPE c LENGTH 10,  "第一段代码块开始
*       col2 TYPE p LENGTH 8 DECIMALS 2.
*
*TYPES:ty_col1 TYPE col1,
*      ty_col2 LIKE col2.
*
*DATA: col1 TYPE c LENGTH 10,  "第二段代码块开始
*      col2 TYPE p LENGTH 8 DECIMALS 2.
*
*TYPES:ty_col1 TYPE col1,
*      ty_col2 LIKE col2.

127efb502e7dd2eedbac1adc656bdf4.png


         从上面的结果我们可以看出:在参照单一类型定义数据类型时,TYPE参照数据类型和数据对象时均不会报错;LIKE参照数据类型时会报错,参照数据对象时不会报错。


参照系统数据对象

TYPES:ty_col1 TYPE sy-subrc,
      ty_col2 LIKE sy-subrc.



817c90d516878ae6cb57c9746362366.png

         从上面的结果我们可以看出:在参照系统数据对象定义数据类型时,TYPE与LIKE均不会报错。


参照全局数据库表

TYPES:ty_sflight      TYPE sflight,
      ty_sflight_copy LIKE sflight.
TYPES:ty_tab_sflight      TYPE TABLE OF sflight WITH NON-UNIQUE KEY carrid,
      ty_tab_sflight_copy LIKE TABLE OF sflight WITH NON-UNIQUE KEY carrid.

62c7b427707213b3ab071c86c027315.png

         从上面的结果我们可以看出:在参照全局数据字典数据库表定义数据类型时,TYPE与LIKE均不会报错。


总结

从上面的例子可以看出:
1)在自定义数据类型时,若是参照的数据类型或者数据对象是局部的,那么一般来说,TYPE与LIKE不能混用;
2)若是参照的数据类型或者数据对象是全局的(比如全局数据库表、系统数据对象sy-subrc、sy-datum等),那么一般来说,TYPE与LIKE可以进行混用。
3)在平时的coding(敲代码)中就要保持良好的习惯,TYPE就用来参照数据类型,LIKE就用来参照数据对象,这样就能保证代码出错的概率大大减少,因为上面也只时一般情况,很难不保证出现特殊情况。虽然SAP ABAP语法中提供了TYPE与LIKE混用的这种便利做法,但是我们ABAPER要提高自身素质,保持良好习惯!


LIKE LINE OF

         LIKE LINE OF主要用来参照内表变量定义一行定义结构体类型。内表变量可以是标准表,排序表或者哈希表**。

TYPES <ty_name> LIKE LINE OF <dt_tab_name>.

参照内表定义

DATA:gt_sflight TYPE TABLE OF sflight WITH NON-UNIQUE KEY carrid."先定义标准内表变量
TYPES:ty_sflight LIKE LINE OF gt_sflight."LIKE LINE OF 参照gt_sflight标准表变量定义一行结构相同的结构体 
DATA:gs_sflight  TYPE ty_sflight. "将ty_sflight实例化,观察效果

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

8f9b2e86f5b2f91e17141df5307d967.png


LIKE TABLE OF

          【LIKE TABLE OF】语句是用来参照结构体对象定义内部表数据类型的语句。在SAP ABAP中拥有标准表类型排序表类型哈希表类型三种内表数据类型。关于内表数据的相关知识可以参考笔者的第七章系列文章:【SAP ABAP——内表】

*定义标准表类型
TYPES: <ty_tab_standard_name> LIKE [STANDARD] TABLE OF <dtype> [WITH NON-UNIQUE KEY <k1 k2 ... kn>] [INITIAL SIZE <n>].
*定义排序表类型
TYPES: <ty_tab_sorted_name> LIKE SORTED TABLE OF <dtype> [WITH [NON-UNIQUE|UNIQUE] KEY <k1 k2 ... kn>][INITIAL SIZE <n>].
*定义哈希表类型
TYPES: <ty_tab_hashed_name> LIKE HASHED TABLE OF <dtype> [WITH UNIQUE KEY <k1 k2 ... kn>] [INITIAL SIZE <n>].

定义标准表类型

DATA:gs_sflight TYPE sflight.
TYPES:ty_tab_sflight LIKE TABLE OF gs_sflight WITH NON-UNIQUE KEY carrid connid fldate.

定义排序表类型

DATA:gs_sflight TYPE sflight.
TYPES:ty_tab_sflight LIKE SORTED TABLE OF gs_sflight WITH NON-UNIQUE KEY carrid connid fldate.

定义哈希表类型

DATA:gs_sflight TYPE sflight.
TYPES:ty_tab_sflight LIKE HASHED TABLE OF gs_sflight WITH UNIQUE KEY carrid connid fldate.

LIKE REF TO

         【LIKE REF TO】语句是用来参照对象定义类的语句。关于该语句的的讲解在此只做简单的介绍,具体面向对象的知识将在该系列文章后续章节【面向对象ABAP程序设计(ABAP OOP)】中讲解!

TYPES:<cl_name> LIKE REF TO <dtype>.

*本地类 lcl_data定义
CLASS lcl_data DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      get_data IMPORTING iv_date TYPE d.
ENDCLASS.                    "lcl_data DEFINITION
*本地类 lcl_data实例化
CLASS lcl_data IMPLEMENTATION.
  METHOD get_data.
*   do something
  ENDMETHOD.                    "get_Data
ENDCLASS.                    "lcl_data IMPLEMENTATION
DATA:ob_data TYPE REF TO lcl_data.
START-OF-SELECTION.
  CREATE OBJECT ob_data.   "创建对象,将类lcl_data实例化
  TYPES:cl_data_ty_copy LIKE REF TO ob_data."LIKE REF TO参照对象定义类


目录
相关文章
|
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