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

news2024/9/22 19:32:45

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

💬原文地址: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 <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】语句将结构体类型实例化并且加入断点进行观察,具体效果如下图所示:

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【git】简洁实用教程

虽然之前有git的笔记了&#xff0c;但是操作和命令太多&#xff0c;有点冗余&#xff0c;下面整理出最常见的一些场景和git需求。 零、Git速查表 好习惯&#xff1a;每次提交后和开发代码前&#xff0c;都应该pull下 常见命令&#xff1a; git clone拉取服务器代码&#xff0…

深度解读 | 如何构建以指标为核心的ABI平台?

在上期一文中&#xff0c;我们了解到BI不同发展阶段运行模式及遇到的问题。“报表阶段”是以报表粒度进行管理&#xff0c;数据和报表完全耦合在一起&#xff0c;在不同报表间产生数据和指标的冗余和重复&#xff0c;形成报表爆炸、技术债&#xff0c;导致数据不可信、分析不敏…

Windows 7下安装oracle12c报错:O/S-Error:(OS 1385)

查看报错日志&#xff1a;C:\Program Files\Oracle\Inventory\logs\ installActions2015-04-21_09-29-15AM.log, 提示查看&#xff1a; D:\app\Administrator\cfgtoollogs\netca\trace_OraDB12Home1-150421 11上午1616.log &#xff0c; 打开该log&#xff0c;在尾部发现如下错…

LaTeX页眉页脚自定义【有图有代码】

LaTeX页眉页脚自定义【有图有代码】一、自定义页眉页脚示例【双页文档】\fancyhead \fancyfoot1、代码讲解2、自定义代码3、页眉和页脚的装饰线4、总页数二、自定义页眉页脚示例【单页文档】\rhead \rfoot三、\pagestyle{}介绍四、设置当前页面样式\thispagestyle{}平时在写报告…

中级软件设计师备考上午题总结

中级软件设计师备考上午题总结 前言 10月末11月初备考了中级软件设计师&#xff0c;备考时间总计20天整&#xff0c;由于预留的备考时间并不多&#xff0c;上午题复习策略主要是以看别人整理好的笔记为主&#xff0c;不懂的地方以看zst_2001的视频为辅&#xff0c;最后预留了…

JDBC Java对数据库增删改查(完整案例)

目录 一.综合上述7个步骤&#xff0c;实现向student表中插入一条数据。 1、注册驱动 2 、获取数据库连接对象 3、获取发送SQL语句对象 4、编写SQL语句&#xff0c;SQL语句最好是先在SQLyog里面写一遍并运行一下&#xff0c;保证SQL语句没有语法 错误&#xff0c;这里sid是…

C语言百日刷题第十二天

前言 今天是刷题第12天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 临近期末&#xff0c;刷几套模拟题 C语言百日刷题第十二天前言选择题判断题编程题选择题 1.设a1;b2;c3;d4;则表达式a<b?a:c<d? a:d的结果是____。 A、3 B、1 C、4 D、2 正确选项&#xf…

Linux多线程(一):什么是线程?

文章目录一、前言二、什么是线程&#xff1f;三、线程是如何实现的&#xff1f;四、基本概念梳理五、后记一、前言 什么是线程&#xff1f;操作系统书籍上可能会给你这样的解释与定义&#xff1a; 线程是在进程内部运行的执行流线程比进程的执行力度更细&#xff0c;线程的调…

年底无情被裁,我面试大厂的这几个月…

2022年接近尾声&#xff0c;“金九十”今年也变成了“铜九铁十”。 大厂不断缩招&#xff0c;不容忽视的疫情影响&#xff0c;加上不断攀升的毕业生人数&#xff0c;各种需要应对的现实问题让整个求职季难上加难。 在这个异常残酷的求职季&#xff0c;很多人的困惑、面临的问…

VM系列模块基本信息

外形尺寸&#xff1a; VM501/604/608 30.0mmX26.0mmX4.3mm 贴插封装-20 VM511/614/618 60.0mmX36.0mmX4.8mm 直插-22 VM704 30.0mmX26.0mmX6.0mm 直插-20 VM704S 32.0mmX32.0mmX15.0mm 直插-20 数字接口&#xff1a;UARTI2C UART&#xff1a;TTL/R…

03-SpringBoot进阶

知识回顾 知识目标 1、SpringBoot单元测试【掌握】 2、SpringBoot 整合 MybatisPlus【重点】 3、SpringBoot添加分页插件【掌握】 4、SpringBoot定义拦截器【掌握】 5、SpringBoot使用类型转换器【掌握】 6、文件上传【掌握】 7、SpringBoot异常处理【掌握】 8、SpringBoot定…

Navicat 16 和表空间 | 第 一 部分

优点 你知道 Navicat 16 支持表空间吗&#xff1f;表空间是表&#xff08;以及索引、大型对象和长数据&#xff09;的存储结构&#xff0c;它将数据库中的数据组织成与在文件系统上存储数据的位置相关的逻辑存储组。它的主要功能是联接物理存储层和逻辑存储层。通过将表分配给表…

c盘空间怎么扩大?

电脑系统主要存储在C盘&#xff0c;用户还可能会将一些软件、文件夹存储在C盘&#xff0c;所以电脑C盘必须拥有足够充足的空间&#xff0c;为了大家更好地使用电脑&#xff0c;这里小编带来的就是电脑扩大C盘空间的教程。 1、右击桌面的计算机图标&#xff0c;然后选择管理! 2、…

过滤器的使用

过滤器的使用过滤器介绍过滤器的使用配置过滤器过滤器路径的配置规则前置、后置、环绕过滤器过滤器链过滤器的优先级过滤器介绍 过滤器(Filter)是位于客户端与服务器资源之间的一道过滤技术&#xff0c;可以在客户端请求到达目标资源之前进行预处理业务。 过滤器作用 执行多个…

【Java实战】系统设计需要注意的细节

目录 一、前言 二、设计规约 1.【强制】存储方案和底层数据结构的设计获得评审一致通过&#xff0c;并沉淀成为文档。 2.【强制】在需求分析阶段&#xff0c;如果与系统交互的 User 超过一类并且相关的 UseCase 超过 5 个&#xff0c;使用用例图来表达更加清晰的结构化需求。…

小说电子书阅读系统毕业设计,小说电子书阅读系统设计与实现,毕业设计论文源码开题报告需求分析

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的电子书阅读系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于java的springboot框架下开发&#xff1b;管理员通过后台录入信息、管理信息&#xff0c;设置网站信息&#xff0c;管理会…

4款游戏开发引擎优缺点分析

随着微信生态中&#xff0c;小程序应用指数级的增长&#xff0c;许多休闲游戏变成为了众多游戏厂商流量变现的新手段。以近期很火的“羊了个羊”为例&#xff0c;它便是我们常常所说的小游戏。 游戏和小游戏的区别 要盘点小游戏开发引擎之前&#xff0c;我们得先来了解下游戏…

vue3+ts 实现文件在线预览

一、背景 企业微信自建项目中要求PC端也能进行文件预览&#xff0c;但是企业微信提供的接口只能在移动端使用&#xff0c;通过查阅资料修改成贴合项目的方法。参考&#xff1a;https://blog.csdn.net/w_t_y_y/article/details/115767747 kkFileView官方文档 二、preview-file…

浅析能源物联网技术在校园能耗监测系统中的应用与研究

摘要:绿色环保已成为时代的主题&#xff0c;与此同时&#xff0c;节能减排也成为我国蓝天保卫战的重要措施。我国大型公共建筑年耗电量约占全国城镇总耗电量的22%&#xff0c;每平方米年耗电量是普通居民住宅的10&#xff5e;20倍&#xff0c;是欧洲、日本等发达国家同类建筑的…

《四》多线程基础——Java线程生命周期及转换

Java并发编程系列文章 《一》多线程基础——Java线程与进程的基本概念 《二》多线程基础——Java线程入门类和接口 《三》多线程基础——Java线程组和线程优先级 《四》多线程基础——Java线程生命周期及转换 《五》多线程基础——Java线程间的通信&#xff08;互斥与协作&…