TYPES、DATA、TYPE、LIKE. 42

创建数据类型与变量... 44

TYPES 语句... 44

DATA 语句... 46

CONSTANTS 语句... 48

STATICS 语句... 48

TABLES 语句

TYPES、DATA、TYPE、LIKE

TYPES语句是定义数据类型,而DATA语句声明变量。

TYPES:定义数据类型

-       数据类型是纯粹的说明。

-       没有与数据类型相关联的内存。

-       数据类型描述数据对象的技术属性。

-       数据类型是数据对象的属性并与数据对象联系紧密。

DATA:声明数据对象(变量、常量)

-       数据对象是程序在运行时使用的物理单元。

-       每个数据对象都有分配给它的特定数据类型。

-       每个数据对象占据一些内存空间。

-       ABAP/4 根据数据对象的数据类型处理数据对象。

TYPES定义的类型需要用来声明一个变量(DATA)来使用,即TYPES定义的类型是供DATA语句来声明一个变量来使用的。

使用自定义的类型使用TYPE,引用其他变量所属类型要使用LIKE

TYPES znumtype TYPE i.
TYPES num1 TYPE znumtype."只能使用TYPE关键字来使用自定义类型znumtype
DATA num2 TYPE znumtype.

DATA znumobj TYPE i.
TYPES num5 LIKE znumobj."只能使用LIKE关键字来使用自定义变量znumobj
DATA num6 LIKE znumobj.

TYPES : BEGIN OF address1,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF address1.
TYPES type1 TYPE address1-city."只能使用TYPE关键字来使用自定义结构体类型或其中的组件类型
DATA obj1 TYPE address1-city.
TYPES type2 TYPE address1.
DATA obj2 TYPE address1.

DATA : BEGIN OF zaddress2,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF zaddress2.
TYPES type3 LIKE zaddress2-city."只能使用LIKE关键字来使用自定义结构体变量或其中的组件变量
DATA obj3 LIKE zaddress2-city.
TYPES type4 LIKE zaddress2.
DATA obj5 LIKE zaddress2.

透明表即可看作是一种类型,也可看作是对象,所以即可使用TYPE,也可以使用LIKE:

TYPES type6 TYPE mara-matnr.
TYPES type7 LIKE mara-matnr.
DATA obj6 TYPE mara-matnr.
DATA obj7 LIKE mara-matnr.

注:定义的变量名千万别与词典中的类型相同,否则表面上即可使用TYPE也可使用LIKE,就会出现这两个关键字(Type、Like)都可用的奇怪现像,下面是定义一个变量时与词典中的结构同名的后果(导致)

DATA : BEGIN OF address2,
  street(20) TYPE c,
  city(20) TYPE c,
  END OF address2.
DATA obj4 TYPE STANDARD TABLE OF address2."这里使用的实质上是词典中的类型address2
DATA obj5 LIKE STANDARD TABLE OF address2."这里使用是的上面定义的变量address2

上面程序编译通过,按理obj4定义是通过不过的(只能使用LIKE来引用另一定义变量的类型,TYPE是不可以的),但由于address2是数字词典中定义的结构类型,所以obj4使用的是数字词典中的结构类型,而obj5使用的是LIKE,所以使用的是address2变量的类型。注:结构(Structure)类型也只能使用TYPE,而不能使用LIKE。

数据类型和数据对象是有不同的命名空间的,即同一程序中可以出现同名的数据类型和对象,但程序中的同名局部数据类型将覆盖数据字典中定义的同名类型。

如果使用的是数据词典中的类型,则即可以使用Like 也可使用 Type:
"SFLIGHT为表类型
DATA plane LIKE sflight-planetype.
DATA plane2 TYPE sflight-planetype.
DATA plane3 LIKE sflight.
DATA plane4 TYPE sflight.
"syst为结构类型
DATA sy1 TYPE syst.
DATA sy2 LIKE syst.
DATA sy3 TYPE syst-index.
DATA sy4 LIKE syst-index.

创建数据类型与变量

数据对象和数据类型有独立的名称空间。这意味着一个名称既可以是数据类型名,同时又可以是数据对象名,如:

DATA c .
TYPES c.

在程序中,可以使用数据声明语句静态地定义数据对象,或者利用操作语句动态地创建数据对象。ABAP/4 包括下列用于静态地创建数据对象和数据类型的关键字:

DATA 语句

用于创建变量

CONSTANTS 语句

用于创建常量

STATICS语句

用于创建变量,这些变量在程序运行期间一直存在,但仅在过程中可见

TABLES语句

用于创建表工作区

TYPES 语句

用于创建用户定义的数据类型

TYPES 语句

基本类型

TYPES { {dtype[(len)] TYPE abap_type [DECIMALS dec]}
      | {dtype TYPE abap_type [LENGTH len] [DECIMALS dec]} }.

TYPES: c,
       text10 TYPE c LENGTH 10,
       result TYPE p LENGTH 8 DECIMALS 2.

参照已存在的类型

TYPES dtype { {TYPE [LINE OF] type}
            | {LIKE [LINE OF] dobj}  }.

TYPES itab_typ TYPE TABLE OF string.
DATA itab TYPE itab_typ.
TYPES: wa_itab1 TYPE LINE OF itab_typ,
       wa_itab2 LIKE LINE OF itab.

引用类型:

TYPES dtype { {TYPE REF TO type}
            | {LIKE REF TO dobj} }.

INTERFACE i1.
...
ENDINTERFACE.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
    INTERFACES i1.
ENDCLASS.

TYPES: iref TYPE REF TO i1,
       cref TYPE REF TO c1,
       dref TYPE REF TO iref.

结构类型:

TYPES BEGIN OF struc_type.
  ...
  TYPES comp ...
  TYPES comp TYPE struc_type BOXED.
  INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
        [AS name [RENAMING WITH SUFFIX suffix]].
  ...
TYPES END OF struc_type.

TYPES: BEGIN OF street_type,
         name TYPE c LENGTH 40,
         no   TYPE c LENGTH 4,
       END OF street_type.
TYPES: BEGIN OF address_type,
         name TYPE c LENGTH 30,
         street TYPE street_type,
         BEGIN OF city,
           zipcode TYPE n LENGTH 5,
           name TYPE c LENGTH 40,
         END OF city,
      END OF address_type.
TYPES zipcode_type TYPE address_type-city-zipcode.

INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
        [AS name [RENAMING WITH SUFFIX suffix]].

该语句只能用在定义结构的BEGIN OF and END OF之间。作用是将结构类型struc_type与结构变量struc的所有组件字段拷贝到当前结构定义的指定位置,INCLUDE就是将可以重复使用的东西先做好,再包含进来。

AS name:给包含进来的结构类型(或结构变量)取一个别名,这样就可以通过结构组件符(-)来选取这个结构类型(或结构变量)

RENAMING WITH SUFFIX suffix:如果include进来的结构类型(或结构变量)的组件字段与现有的重复,则可以使用此选项重命名include进来的结构类型(或结构变量)的各组件字段名,具体做法只是在原来组件名后加上了指定的后缀suffix

TYPES: BEGIN OF t_day,
         work TYPE c LENGTH 8,
         free TYPE c LENGTH 16,
       END OF t_day.
DATA BEGIN OF week.
        INCLUDE TYPE t_day AS monday    RENAMING WITH SUFFIX _mon.
        INCLUDE TYPE t_day AS tuesday   RENAMING WITH SUFFIX _tue.
        INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed.
...
DATA END OF week.

可以通下面的方式来访问week结构变量:

直接看作是week结构变量组件:week-work_mon, week-free_mon, week-work_tue

由于使用as别名,所以还可以这样访问:week-monday-work, week-monday-free, week-tuesday-work

内表类型

Ranges Table Types 条件内表类型

TYPES dtype {TYPE RANGE OF type}|{LIKE RANGE OF dobj}
            [INITIAL SIZE n].

定义了以下相同行结构的内表:

TYPES: BEGIN OF linetype,
         sign   TYPE c LENGTH 1,
         option TYPE c LENGTH 2,
         low    {TYPE type}|{LIKE dobj},
         high   {TYPE type}|{LIKE dobj},
       END OF linetype.

DATA 语句

预定义类型

DATA { {var[(len)] TYPE abap_type [DECIMALS dec]}
     | {var [TYPE abap_type [LENGTH len] [DECIMALS dec]]} }
     [VALUE  val|{IS INITIAL}]

DATA p LENGTH 2 TYPE p VALUE '1.1' DECIMALS 1.

DATAp(2)TYPEpVALUE'1.1'DECIMALS1.

DATA p(2) TYPE p VALUE IS INITIAL DECIMALS 1.

DATA: text_buffer TYPE string VALUE `Text`,
      count TYPE i VALUE 1,
      price TYPE p LENGTH 8 DECIMALS 2 VALUE '1.99'.

参照已存在类型

DATA var { {TYPE [LINE OF] type}
           | {LIKE [LINE OF] dobj} }
           [VALUE  val|{IS INITIAL}]

DATA: spfli_wa1 TYPE spfli,
      spfli_wa2 LIKE spfli_wa1.
DATA <f> LIKE LINE OF <itab>.

在这种情况下,<itab>必须是某个内表数据对象。

在ABAP中,定义内存变量时,除了可以参照标准的ABAP的数据类型与词典中的表(或表字段)、结构(或表字段)、视图(或视图字段))外,还可以直接参考词典中的Data Element,但不能直接引用Domain。以下是两句等效:

DATA mycarrid2 TYPE spfli-carrid."参照数据库表字段
DATA mycarrid TYPE s_carr_id."直接参照Data Element

如果要定义一个屏幕字段时,最好是参照结构体中的一个字段或透明表中的一个字段,或直接采用一个Data Element,这样屏幕字段会自动带有应Data Element上语文上以及技术上的属性,即该输入域将自动带有F1 Help和F4 Help

引用类型

DATA ref { {TYPE REF TO type}
           | {LIKE REF TO dobj} }
           [VALUE IS INITIAL] .

"因为没有定义方法,所以这里不需要 C1 的Implements类
CLASS c1 DEFINITION.
  PUBLIC SECTION.
    DATA a1 TYPE i VALUE 1.
ENDCLASS.

DATA: oref  TYPE REF TO c1,
      dref1 LIKE REF TO oref,
      dref2 TYPE REF TO i.

CREATE OBJECT oref.
"让 dref1 也指向 oref 所指向的对象
GET REFERENCE OF oref INTO dref1.

CREATE DATA dref2.
"ref->* 的作用就是求地址,与C语言中的 & 符号一样,求地址所对应的对象或变量
dref2->* = dref1->*->a1.

WRITE: dref2->*." 1

结构类型

DATA BEGIN OF struc .
  ...
  DATA comp ...
  INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
     [AS name [RENAMING WITH SUFFIX suffix]].
  ...
DATA END OF struc.

RENAMING WITH SUFFIX具体用法请参照前面的TYPES语句中的结构定义

内表

条件内表类型:

DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}
          [INITIAL SIZE n]
          [VALUE IS INITIAL]

或者:

RANGES: s_ebeln1 FOR ekko-ebeln.

 

DATA: spfli_wa TYPE spfli,
      r_carrid TYPE RANGE OF spfli-carrid,
      r_carrid_line LIKE LINE OF r_carrid.

r_carrid_line-sign   = 'I'.
r_carrid_line-option = 'BT'.
r_carrid_line-low    = 'AA'.
r_carrid_line-high   = 'LH'.
APPEND r_carrid_line TO r_carrid.

SELECT *
       FROM spfli
       INTO spfli_wa
       WHERE carrid IN r_carrid.
  ...
ENDSELECT.

CONSTANTS 语句

语法

CONSTANTS<c>[<length>] <type>[<decimals>]<value>.

要将结构定义为常量,请写:

CONSTANTS: BEGIN OF <fstring>,
<component declaration>,

..............

END OF <fstring>.

利用<value>参数指定的初始值,在程序的执行期间不能更改。

STATICS 语句

如果要在过程的运行时间之外仍保留某变量的数值,可以在该过程中利用 STATICS 语句定义该变量。

语法

STATICS <s>[<length>] <type> [<value>] [<decimals>].

要在过程中将结构定义为静态有效,请写:

STATICS: BEGIN OF <fstring>,
<component declaration>,
..............

END OF <fstring>.

如果在程序中多次调用某过程,对于利用 STATICS 定义的变量,过程总是使用该变量的最新(近)值,但不能从过程外部来访问静态局部变量。

TABLES 语句

利用 TABLES 语句,可以创建称为表工作区的内存变量。表工作区是参考 ABAP/4 词典对象的结构。语法如下:

TABLES <structure_type>.

TABLES <transparent table_type>.

TABLES <view>.

 

<dbtab>是 ABAP/4 词典对象的名称,同时也是创建的内存变量名。可以用来参照的的有效 ABAP/4 词典对象是

2 结构

2 视图

2  数据库表(透明表)

表工作区提供一个接口,通过该接口可以将数据从数据库表加载到程序,或利用OPEN SQL 语句修改数据库表的内容。

TABLES: SPFLI.
SELECT * FROM SPFLI.
   WRITE: SPFLI-MANDT, SPFLI-CARRID, SPFLI-CONNID, ......
ENDSELECT.

示例中,TABLES 语句创建表工作区 SPFLI。SPFLI 与 ABAP/4 词典中声明的数据库表 SPFLI 结构相同。在 SELECT 循环中,用属于数据库表 SPFLI 的行填充表工作区 SPFLI,并且不用在查询语句中可以省略into spfli选项

TABLES: spfli.

DATA spfli TYPE spfli.

以上两个语句等价。即在定义内存变量时,可以将透明表当做结构体来使用

另外,在屏幕(对话屏幕、选择屏幕)中,如果需要引入数据中的表字段,需要使用TABLES语句定义一个接口工作区进行屏幕和程序间的数据交换(PARAMERTS可以不需要,但SLECTION-OPTION需要)。

转载于:https://www.cnblogs.com/jiangzhengjun/p/4292833.html

TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、TABLES相关推荐

  1. NILM非侵入式负荷识别(papers with code、data)带代码的论文整理——(公开数据集、工具、和性能指标篇) 全网最全

    说在最前面 这篇文章主要介绍用于非侵入式负荷识别领域目前的公开数据集.工具和其它等,如果需要看论文及具体代码实现,看我上一篇的文章. 其外,不是所有数据集我都用过,我只用过UK-DALE,所以其它数据 ...

  2. $.post html5,$.post(url,[data],[fn],[type])_jQuery之家-自由分享jQuery、html5、css3的插件库...

    示例 1描述: 请求 test.php 网页,忽略返回值: jQuery 代码: $.post("test.php"); 2描述: 请求 test.php 页面,并一起发送一些额外 ...

  3. Intent的七大属性, ComponentName、  Action 、 Category 、 Data  、Type、  Extra  、Flags。

    目录 Intent的七大属性: ComponentName.  Action . Category . Data  .Type.  Extra  .Flags. (一).ComponentName属性 ...

  4. NILM非侵入式负荷识别(papers with code、data)带代码的论文整理——(论文及实现代码篇) 全网最全

    说在最前面 研究生三年快毕业了,毕业前整理一下该领域的研究工作.正所谓,我栽树,后人乘凉.研究NILM的时候,个人觉得最快的方法是直接复现别人的论文,或者甚至用别人论文的代码直接跑出来体会整个流程(数 ...

  5. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  6. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

    本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...

  7. jQuery源码解析(1)—— jq基础、data缓存系统

    闲话 jquery 的源码已经到了1.12.0 版本,据官网说1版本和2版本若无意外将不再更新,3版本将做一个架构上大的调整.但估计能兼容IE6-8的,也许这已经是最后的样子了. 我学习jq的时间很短 ...

  8. SQL 语句代编代写、DATA MANAGEMENT SYSTEMS代写代做

    SQL 语句代编代写.DATA MANAGEMENT SYSTEMS代写代做 DATA MANAGEMENT SYSTEMS DESIGN PROJECT Purpose of this projec ...

  9. 静态分析:IDA逆向代码段说明 text、idata、rdata、data

    通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件的结构中对应的段. 一.text段: 该段位程序代码段,在该段一开始就可以看 ...

最新文章

  1. harmonyos2.0开发者beta,华为鸿蒙 HarmonyOS 2.0 手机开发者 Beta 活动(广州站)报名开启...
  2. HTML语言利用函数求中位数,javascript-使用OnClick()计算用户放入HTML表中的数字的平均值...
  3. python爬取股票大单历史记录_利用bs4爬取股票的历史交易数据
  4. 什么样的网站建设公司才是值得信赖的?
  5. 06-JavaScript的流控制语句
  6. BAJT 中高级 Java 面试题答案
  7. VB.NET水晶报表控件经验总结
  8. 全屋wifi测试软件,全屋WIFI评测
  9. 16 计算二叉树叶子结点数目(耿 6.14)
  10. CodeCraft-20 (Div. 2) E. Team Building(状压dp)
  11. Java生成随机图片验证码工具类
  12. to be top。。。
  13. Android USB 扫码枪获取扫描内容
  14. Filter过滤器导致CSS样式失效
  15. 八、QOS队列调度与报文丢弃
  16. jar包——jar包的打包
  17. [仅ESP32] BT AT命令
  18. 如何用代码在Delphi 7.0中安装TeeChart 7.0
  19. EDR与态势感知,到底有啥区别?
  20. 血色先锋队——bfs

热门文章

  1. 数据库完整性概念和数据库安全性概念之间的区别与联系
  2. c++餐饮管理系统_扎哈·哈迪德建筑事务所赢得深圳湾超级总部基地C塔项目国际竞赛...
  3. python迭代器是什么意思_python 迭代器(第二次总结)
  4. FreeRTOS+STM32F103中断中发送任务通知单片机死机问题
  5. 宅在家里写数据库中DQL(查询)
  6. 滑动窗口1——无重复字符的最长字串
  7. ElasticSearch通过Scroll方式遍历索引(Python代码)
  8. 一张图带你了解Android5.0中的colorPrimary、colorPrimaryDark、colorAccent
  9. linux安装操作系统以及配置ip地址
  10. Servlet具体解释