最近看了一下ABAP的表类型相关知识,做一个自己的分析总结。
ABAP的表类型似乎我感觉只应该有2种,而不是大家说的3种。
从数据存储的原理上来看的。下面我做一个分析。
一般情况下,我们都说ABAP中有表有3种类型 :透明表 (transparent table)、簇表(cluster table)、 池表 (pool table)。
先来说下什么叫做透明表(transparent table):透明表是一种和数据库具 有相同结构的表存储结构,假设我在SAP系统中,使用SE11创建了一个CUSTOMER TABLE 那么我创建的结构是怎么样的,在数据库的存储结构就是怎么样的,但是在SAP中,当我们对透明表调整结构的时候,不需要我们对数据库表也进行调整,这是 SAP的方便的特点之一,这里需要说明我们会经常遇到的一种情况:当我们删除一行时候,保存激活会没有问题,但是为什么我们修改一行的时候,例如把 DATA ELEMENT改了,怎么就不让激活了呢。遇到这种凡是对DATA ELEMENT 改变的操作,我们需要保存,然后去SE14中激活,要不然就在SE11中整行删掉重建.
什么是簇表和表簇?CLUSTER TABLE 和TABLE CLUSTER.
这俩名词,刚开始学的时候,真实很折磨人,根本不知道啥意思。但是随着对知识的进一步积累,慢慢的有些眉目了,也感到了它存在合理性。
什么是簇表?我们可以很直观的理解为,在DATABASE (数据层),除了我们定义的主键,然后把其他的内容都当成表格的一个字段存起来。也就是说这个表的结构可以理解为:主键+ 一个存储功能的字段的 组合。
然而在其中还会有PAGENO的这个字段,这就是说,一行空间不够(32KB)用,在主键相通的情况下,继续细分,用来将属于一个主键的内容联系起来的字段1、2、3.。。。。
要理解簇表,首先自己创建一个瞧瞧吧。
SE11,首先创建一张透明表,透明表的名字一定要少于10位。
然后点击 UTILITES->OTHER DICTIONARY OBJECTS
自定一个名字少于10位的表簇。(table CLUSTER)
表簇和簇表的区别和联系?
表簇,是该表在DATABASE的存储结构,
簇表,是该表在SAP DICTIONARY展现在我们眼前的结构。
于是我们就会知道为什么我们不能用NATIVE SQL去访问 这个簇表了。因为我们在SAP中的看到的字段,在DATABASE 是不存在的,是通过转化的才显示在我们SAP DICTINARY中的结构。
恩,然后就是在SAP中我们想看到什么样的结构 就要在簇表中创建一个什么样的结构。
簇表都是由透明表转化成的,要创建簇表,首先就要创建一个透明表,这个透明表的显示结构,就是我们想想在簇表中显示的结构,然后在SE11 进去看观看此透明表状态并且处于修改状态,点击EXTRAS -> CHANGE
table category. 选最后一个 (RADIO BUTTON) 复制簇表的选项,是个小对勾,这个点完了,系统会自动跳到SE11的界面,好像什么也没有发生。这时候我们去DELIVERY AND MAINTENANCE标签下面看,就会出现了一个POOL/CLUSTER的文本框,填入我们创建的表簇。激活保存。就搞定了。
注意,这里我们要在表簇中 手工将VARKEY 删掉,换成我们表的要显示的主键, 表簇主键为我要显示主键的子集。
而表池创建后激活就可以了。然后进入透明表CHANGE TABLE CATEGORY 中点第三个么再进去DELIVERY AND MAINTENANCE中 填入 表池,激活。
池表和簇表的创建过程相同。
但是池表和簇表还是有区别的。
INSERT 透明表 INTO 簇表。 只要透明的簇表的主键都在透明表里面就行。就是透明表主键多了也无所谓。
INSERT 透明表 INTO 池表. 透明表和池表的主键必须相同的。
池表和簇表的存储原理相同的。
所以我感觉,对于从原理上来分析,我们只需要将SAP 的表分成2类就OK了。
struct顾名思义:就是结构体,用来帮助内表和透明表之间的操作;透明表是系统自带表,一般不允许修改;内表:是你自己定义的。比如:
data:begin of itab occurs 0,
col1 type i,
col2(4) type c,
end of itab.
这是一张包含工作区的内表,内表是用来对数据库或透明表操作的。因为SAP有严格的权限,一般不允许开发员随便更改数据库数据,所以开发人员在开发时只能自己大量的建立内表来读出数据库数据。
而结构体(Struct)和内表类是,刚开始时,你会发现使用结构体和内表都差不多,使用它们任何一个都可以完成你的目的,但是一段时间后你就会发现它们各自的作用是什么了。这些语法知识建议去看更详细的教程,边看教程边操作,这样记忆才会深。
sap透明表、结构、簇介绍以及查找表方法
一些人在写开发功能说明书的时候不知道如何去找屏幕字段对应的透明表,下面我来介绍一个比较有效的方法:
首先简单介绍一下概念:
在SAP中的表的种类有以下三种:Tranparent
table,Pools,Cluster table。
透明表
每个透明表在数据库中有一个相应的物理表。物理表的名称和数据字典中的逻辑表定义的名称一致。事物中处理的数据存贮在透明表中。可以通过数据库直接查询,abap人员也希望能了解这个表的名字。
存贮表
存储表可以用来存贮控制数据(例如:屏幕顺序,程序参数或临时数据)。几个存
储表可以组合成一个表库。该表库和数据库中的一物理表库相一致。它包含了各组
合库分派给它的所有记录。
簇表
连续的文本如文档之类可以存贮在簇表中。几个簇表可以组合成一个表簇。对这种表类型,不同表中的几个逻辑行组合到一物理记录。这可以实现一对象接一对象地存贮或访问,访问簇中的表的一个前提是,至少关键字的一部分必须相符合。几个簇表存贮在数据库中一个相应的表里。
创建视图结构
活动期间生成视图的结构。该结构在运行时间环境作为接口使用。 通常不显示在ABAP/4 词典中。
【表】
在R/3中有三种表类型:
透明表格
共享表格
簇表
透明表格:
透明表格与数据库中的表一一对应,有相同的表名,字段数,字段名ABAP
词典中透明表的定义相对数据库是独立的,定义的表与数据库中的表有相同的结构。当表被激活时,数据库中的物理表存储在ABAP 词典中。
共享表格:
共享表格与数据库中的表是多对一的关系,表名不同,字段数不同,字段名不同。共享表是SAP的一个特有构思。在数据库中,所有共享表格被存储在一个表中,该表叫
‘表池(Table pool)’。SAP 用共享表格存储系统数据。
簇表:
簇表与共享表格类似。也是多对一的关系。多数簇表存储在一个叫 Table cluster的表中﹐当一些表有共用的PK,或数据被同步访问时,使用簇表。
簇表与透明表的差异在于是针对一组表来处理的,从单个表去理解与透明表没有差异,但是多个表组成簇表,它们在物理上对主键只存储一遍,故对簇表的关联查询可以极大提高访问速度。
A physical table definition is created in the database for the table definition stored in the ABAP Dictionary for transparent tables when the table is activated. The table definition is translated from the ABAP Dictionary to a definition of the particular database.
On the other hand, pooled tables and cluster tables are not created in the database. The data of these tables is stored in the corresponding table pool or table cluster. It is not necessary to create indexes and technical settings for pooled and cluster tables.
【结构】
结构在数据库不存在数据记录。结构用于在程序之间或程序与屏幕之间的接口定义。写过程序的人应该会比较容易理解,结构就是事先定义
好的一组数据格式的集合,当系统从数据库中查询出数据时,就可以把这些数据按照结构所要求的格式转存入结构中。这个存贮只是基于内存或缓存级别,不会永久
存储。
附加结构
附加结构定义字段的子集,该字段属于其他表格或结构,但是在修正管理中作为单独的对象。这实际上是结构字段对于其他结构或表的引用。
其实通俗的说,Cluster
Table就是把一堆数据按一定规则以序列形式存放在某一个“特别大”的“字段”里,将来再按照这个特定规则来读取。
提高性能,节省空间,捎带加强安全性,这就是Cluster
Table的用途。
在界面中查找表的方法之一是F1->技术信息->数据元素->所用处理清单
下面通过实例来举例描述:
进入TCode:pa30,选择一个人,如下图:
选择其中一个字段,press
F1,
然后选择Technical Infomation:
,
双击数据元素:
然后选择所用处理清单:
点击后会出现一个列表,即可看到有哪些结构和表对此数据元素进行了引用,您可以通过描述字段看到他的含义,如果你上一屏幕选择的条件不是很多的话,这里应该会很少。基本很快就可以找到您要的透明表了