开发基础 报表教程 数据字典 对话编程 表单打印 增强出口 SAP接口 S/4 HANA
实战案例 实战笔记 资料下载 CRM
问答互助 会员分享 俱乐部 广告区
论坛指南、建议和投诉
Twilight发表于 2014-03-27 21:34Twilight 最后回复于 2014-03-27 21:34 [复制链接] 13312 0
使用道具 举报
Twilight
管理员
发表回复 回帖后跳转到最后一页
1. 介绍
图-1 数据库表视角
除了透明表外,SAP 系统还能够在ABAP 字典中以相同的方法定义数据库级别上的池表和簇表。池表和簇表都是把ABAP字典中逻辑定义的多个表分组合并到一个物理的数据库表。
什么是簇表?我们可以很直观的理解为,在 DATABASE (数据层),除了我们定义的主键, 然后把其他的内容都当成表格的一个字段存起来。 也就是说这个表的结构可以理解为: 主键 + 一个存储功能的字段的组合。 然而在其中还会有 PAGENO 的这个字段,这就是说,一行空间不够(32KB)用,在主键相通 的情况下,继续细分,用来将属于一个主键的内容联系起来的字段 1、2、3。
表簇,是该表在 DATABASE 的存储结构, 簇表,是该表在 SAP DICTIONARY 展现在我们眼前的结构。 于是我们就会知道为什么我们不能用 NATIVE SQL 去访问 这个簇表了。因为我们在 SAP 中的看到的字段,在 DATABASE 是不存在的,是通过转化的才显示在我们 SAP DICTINARY 中的结构。
2. 优点和缺点
3. 簇表的访问
图-2 簇表的存储结构示意图
图-3 对簇表的可选择访问
图-4 对簇表的不可选择访问
4. 池表的访问
池表存储来自ABAP 字典中定义的表达数据记录。表互相不依赖。小的SAP 表被分组合并到一起形成一个数据库表。
图-5 池表的存储结构示意图
图-6 对池表的可选择访问
图-7 对池表的不可选择访问
二、 创建一个簇表
簇表都是由透明表转化成的,要创建簇表,首先就要创建一个透明表,这个透明表的显示结构,就是我们想想在簇表中显示的结构,然后在 SE11 进去看观看此透明表状态并且处于修改状态,点击 Extras -> Change Table Category. 选最后一个 (RADIO BUTTON) 复制簇表的选项,是个小对勾,这个点完了,系统会自动跳到 SE11 的界面,好像什么也没有发生。这时候我们去 DELIVERY AND MAINTENANCE 标签下面看,就会出现了一个 POOL/CLUSTER 的文本框,填入我们创建的表簇。激活保存就搞定了。
图8-1簇表创建步骤
图8-2簇表创建步骤
图8-3 簇表创建步骤
注意,这里我们要在表簇中手工将 VARKEY删掉,换成我们表的要显示的主键,比如MATNR,表簇主键为我要显示主键的子集,再添加一个mandt集团 关键字 char 3。 而表簇创建后激活就可以了。然后进入透明表 CHANGE TABLE CATEGORY 中点第三个 么再进去 DELIVERY AND MAINTENANCE 中 填入表簇,激活。 池表和簇表的创建过程相同。 但是池表和簇表还是有区别的。 INSERT 透明表 INTO 簇表。 只要透明的簇表的主键都在透明表里面就行。就是透明表 主键多了也无所谓。 INSERT 透明表 INTO 池表. 透明表和池表的主键必须相同的。
三、 簇表与池表的数据写入
四、 簇表与池表的SQL解析
在ABAP代码中,我们可以使用受限制的OPEN SQL来访问簇表与池表,受限制的功能有INNER、SUM、GROUP BY等等需要在数据库上完成的语句都被限制了。 SQL语句的解析: SELECT SINGLE * FROM ZLIAP05语句的SQL解析为
图-9 SQL簇表的解析
SELECT SINGLE * FROM ZLIAP06语句的SQL解析为
图-10 池表的解析
从上面两个图可以看到,解析后的SQL语句中是不存在ZLIAP05与ZLIAP06表的,它们在数据库层也不是实际存在的表。