TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、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]} TYPES: c, |
参照已存在的类型: TYPES dtype { {TYPE [LINE OF] type} TYPES itab_typ TYPE TABLE OF string. |
引用类型: TYPES dtype { {TYPE REF TO type} INTERFACE i1. |
结构类型: TYPES BEGIN OF struc_type. TYPES: BEGIN OF street_type, |
INCLUDE { {TYPE struc_type} | {STRUCTURE struc} } 该语句只能用在定义结构的BEGIN OF and END OF之间。作用是将结构类型struc_type与结构变量struc的所有组件字段拷贝到当前结构定义的指定位置,INCLUDE就是将可以重复使用的东西先做好,再包含进来。 AS name:给包含进来的结构类型(或结构变量)取一个别名,这样就可以通过结构组件符(-)来选取这个结构类型(或结构变量) RENAMING WITH SUFFIX suffix:如果include进来的结构类型(或结构变量)的组件字段与现有的重复,则可以使用此选项重命名include进来的结构类型(或结构变量)的各组件字段名,具体做法只是在原来组件名后加上了指定的后缀suffix TYPES: BEGIN OF t_day, 可以通下面的方式来访问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} 定义了以下相同行结构的内表: TYPES: BEGIN OF linetype, |
DATA 语句
预定义类型 DATA { {var[(len)] TYPE abap_type [DECIMALS dec]} 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`, |
参照已存在类型 DATA var { {TYPE [LINE OF] type} DATA: spfli_wa1 TYPE spfli, 在这种情况下,<itab>必须是某个内表数据对象。 在ABAP中,定义内存变量时,除了可以参照标准的ABAP的数据类型与词典中的表(或表字段)、结构(或表字段)、视图(或视图字段))外,还可以直接参考词典中的Data Element,但不能直接引用Domain。以下是两句等效: DATA mycarrid2 TYPE spfli-carrid."参照数据库表字段 如果要定义一个屏幕字段时,最好是参照结构体中的一个字段或透明表中的一个字段,或直接采用一个Data Element,这样屏幕字段会自动带有应Data Element上语文上以及技术上的属性,即该输入域将自动带有F1 Help和F4 Help |
引用类型 DATA ref { {TYPE REF TO type} "因为没有定义方法,所以这里不需要 C1 的Implements类 |
结构类型 DATA BEGIN OF struc . |
条件内表类型: DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj} 或者: RANGES: s_ebeln1 FOR ekko-ebeln.
DATA: spfli_wa TYPE spfli, |
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需要)。
TYPES、DATA、TYPE、LIKE、CONSTANTS、STATICS、TABLES的更多相关文章
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)
题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)
接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...
- Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion
本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...
- jQuery源代码解析(1)—— jq基础、data缓存系统
闲话 jquery 的源代码已经到了1.12.0版本号.据官网说1版本号和2版本号若无意外将不再更新,3版本号将做一个架构上大的调整.但预计能兼容IE6-8的.或许这已经是最后的样子了. 我学习jq的 ...
- jQuery中attr()、prop()、data()用法及区别
.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1 ...
- jquery中attr、prop、data
在高版本的jquery中获取标签的属性,可以使用attr().prop().data(),那么这些方法有什么区别呢? 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元 ...
- jQuery 选择器 筛选器 样式操作 文本操作 属性操作 文档处理 事件 动画效果 插件 each、data、Ajax
jQuery jQuery介绍 1.jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方 ...
- 前端基础-jQuery的最常用的的方法each、data、
阅读目录 each inArray get index data 一.jQuery中each方法的应用 jQuery中有个很重要的核心方法each,大部分jQuery方法在内部都会调用each,其主要 ...
- 静态分析:IDA逆向代码段说明 text、idata、rdata、data
静态分析:IDA逆向代码段说明 text.idata.rdata.data 通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件 ...
随机推荐
- Java中的get()和set()方法
对于JAVA初学者来说,set和get这两个方法似乎已经很熟悉了,这两个方法是JAVA变成中的基本用法,也是出现频率相当高的两个方法. 如果你对于这两个方法还有困惑甚至完全不知道这两个方法是做什么的, ...
- YUI Reset CSS (学习摘抄)
正在使用CSS的你,用过CSS Reset吗?当然,或许你用了,却不知道正在用,比如你可能用到: *{ margin: 0; border: 0; padding: 0; } 这 ...
- yum安装mysql后没有mysqld
在Centos中用命令 yum install mysql安装数据库,但装完后运行mysqld启动mysql的时候提示找不到,通过 find / | grep mysqld 也没找到mysqld的目录 ...
- Linux USB摄像头驱动【转】
本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...
- Linux下jdk的配置
首先将*.tar.gz压缩包解压 命令:tar -xzvf *.tar.gz假设得到的文件夹为java 将其移动到/usr/中 命令为:sudo mv java /usr/ 然后设置环境变量: sud ...
- 浅析Java的HashCode,以及equals
1.JDK规定,equals相等的两个对象hashCode也必须相等,这两个方法都是从Object上面继承而来的,通过观察JDK源码可以发现Object的equals方法是对2个对象的地址(逻辑地址, ...
- 查找素数(0~1000)的算法(Java代码)
1.一般方法,设置标兵,进行查找 class prime{ //检查是否是素数 public void isPrime(){ ; ;i<=;i++){ ; ;j<i;j++){ ){ co ...
- Linux hrtimer分析(2)
http://blog.csdn.net/angle_birds/article/details/17375901 本文介绍Linux2.6.29中,配置高精度模式的hrtimer与未配置高精度模式时 ...
- 更改printk打印级别
1.查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4 4 1 7 其中第一个"4"表示内核打印函数printk的打印级别,只有 ...
- [团队项目]第二个冲刺 看板和燃尽图 Sprint2 6.8/6.9/6.10/6.11/6.12/6.13/6.14
1.开始一个新的冲刺: 起止:2016.6.1~2016.6.14 按照以下过程进行 ProductBacklog:继续向下细化 Sprint 计划会议:确定此次冲刺要完成的目标 Sprint Bac ...