SAP ABAP

您所在的位置:网站首页 Like和like的区别 SAP ABAP

SAP ABAP

2023-12-03 19:09| 来源: 网络整理| 查看: 265

💬个人网站:【芒果个人日志】​​​​​​

💬原文地址:SAP ABAP——数据类型(五)【LIKE系列关键字】 - 芒果个人日志 (wyz-math.cn)

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

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

🤟每日一言:保护好你的梦想,等到它开花结果的那天,它会让你俯视所有曾经看低你的人。

目录

LIKE

参照自定义内表类型

参照单一类型

参照系统数据对象

参照全局数据库表

总结

LIKE LINE OF

参照内表定义

LIKE TABLE OF

定义标准表类型

定义排序表类型

定义哈希表类型

LIKE REF TO

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.

LIKE参照TYPES定义的内表类型时会报错

TYPE参照DATA定义的内表对象时会报错           从上面的结果我们可以看出:在参照自定义内表类型定义数据类型时,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.

LIKE参照TYPES定义的单一类型时会报错

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

参照系统数据对象 TYPES:ty_col1 TYPE sy-subrc, ty_col2 LIKE sy-subrc.

TYPE与LIKE参照系统数据对象时均未报错

          从上面的结果我们可以看出:在参照系统数据对象定义数据类型时,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.

TYPE与LIKE参照数据库表分别定义工作区和内表类型时语法均未报错

          从上面的结果我们可以看出:在参照全局数据字典数据库表定义数据类型时,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 LIKE LINE OF . 参照内表定义 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】语句将结构体类型实例化并且加入断点进行观察,具体效果如下图所示:

参照内表变量定义一行结构体类型

LIKE TABLE OF

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

*定义标准表类型 TYPES: LIKE [STANDARD] TABLE OF [WITH NON-UNIQUE KEY ] [INITIAL SIZE ]. *定义排序表类型 TYPES: LIKE SORTED TABLE OF [WITH [NON-UNIQUE|UNIQUE] KEY ][INITIAL SIZE ]. *定义哈希表类型 TYPES: LIKE HASHED TABLE OF [WITH UNIQUE KEY ] [INITIAL SIZE ]. 定义标准表类型 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: LIKE REF TO . *本地类 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参照对象定义类


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3