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参照对象定义类


目录
相关文章
|
4天前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
19 3
|
4天前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
6 1
|
4天前
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
6 1
|
4天前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
13 2
|
4天前
|
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
11 0
|
4天前
|
存储 前端开发 Linux
在 SAP ABAP 系统里访问 FTP 服务器
在 SAP ABAP 系统里访问 FTP 服务器
9 0
|
4天前
|
SQL 负载均衡 监控
SAP ABAP DBSQL_SQL_ERROR 错误
SAP ABAP DBSQL_SQL_ERROR 错误
14 2
|
4天前
|
存储 前端开发 应用服务中间件
使用 SAP ABAP 执行 FTP 操作
使用 SAP ABAP 执行 FTP 操作
8 0
|
4天前
|
BI 网络安全
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
7 0
|
4天前
|
监控 安全 应用服务中间件
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original
SAP ABAP STRUST 事务码里的错误消息 - Local PSE does not match database original
7 0
http://www.vxiaotou.com