注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

黑山老妖的博客

 
 
 

日志

 
 
关于我

主要用来存放收集的资料,几乎都是转贴的东西!感谢原作者!

网易考拉推荐

内表(internal table)和工作区(work area)的区别  

2007-02-15 16:10:32|  分类: ABAP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://www.sapforum.net/cgi-bin/topic.cgi?forum=1&topic=1948&show=0

[求助]内表(internal table)和工作区(work area)的区别

ABAP/4的Internal Table如同其他语言的数组结构,在操作上可以有复制,删除,新增等功能,可以存很多条记录,并且ABAP的这种用法,对行数没什么限制。

WORK AREA就是其他语言的结构,象自定义的一个类型一样,但一旦创建一个Internal Table之后,WORK AREA就成了外界跟Intertal Table的交流口,每条记录的进入和取出都得通过它。并且在清除它们的时候要分开来清除。

http://www.sapforum.net/cgi-bin/topic.cgi?forum=1&topic=1897&show=60

要用 MODIFY 语句更改行 ,请使用:

语法

MODIFY <itab> [FROM <wa>] [INDEX <idx>].

FROM 选项中指定 的工作区域 <wa> 代替 <itab> 中的行。如 果表格有表 头行,可以 忽略 FROM 选项。这样 ,表格工作 区域就代替 行。

如果使用 INDEX 选项,则新 行代替索引 为 <idx> 的现有行。 如果替换成 功,则将 SY-SUBRC 设置为0。 如果内表包 含的行少于 <idx>, 则不更改任 何行并且 SY-SUBRC 包含4。

如果使用没 有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块中通过更 改当前行( 例如由 SY-TABIX 返回其索引 的行)来处 理它。

modify 是用来更新内表的!

http://www.100easy.com/forum/dispbbs.asp?boardID=16&ID=10178&page=2

我的理解是一般SAP有三种表

transparent table透明表, pooled table and cluster table簇表. 对于透明表是和DB层的physical table对应的.

对于后俩者,是不对应到DB表的. 比如TBSL就是一个pooled table, 你在DB层找不到此表.

然后多个cluster(pooled) tables组成一个table cluster和table pool . table cluster和table pool是DB层的一个物理表.

为什么要这样呢?我想一个原因可能是速度问题, 我想在存取数据方面,table cluster 可能比table pool要快些,还是那个老问题,就是ABAP dict的数据操作语句是如何转换到DB能认识的语句的, 我study过,但是没什么结果.

记得BSEG吧?当然作为一个cluster table它在DB层不存在, 但是它是作为table cluster :RFBLG的一部分的, 另一个典型的pooled table : 比如posting key OB41设置其实是将数据write to pooled table TBSL, TBSL同样在DB层看不到,但是它是做为table pool ATAB(DB的一个physical 表), RFBLG 和ATAB都有一个字段save data是binaray save的, 所以我想SAP是将经常用到的表(比如bseg)弄到table cluster中, 而配置表ATAB使用频率相对低点,就搞table pool, 但是有理由相信他们速度肯定比存取transparent table要快得多,. 至于底层的技术可能要问真正的ABAP高手了.

我测试过将ATAB delete那个二进制字段,然后在create, 结果posting key不能用了, 比如从RFBLG将BELNR(FI doc no)那条记录删除, OK, FB03再也看不到此doc的line item了, 就是说会计凭证的line item data是binary save在vardata那个field中的.............

pooled table只是才sap dict(se11)才能看到的, 在DB层是没有的, 简单得说,大概是为了加块速度或其他原因吧, 多个pooled table组成一个table pool (就象TBSL-posting keys table),SE16 check ATAB(有个字段是tabname)你会发现有很多pool table组成了它.

另一个case是BSEG和RFBLG,可是RFBLG倒是没有说明你BSEG就在RFBLG中, 但是你可看到BSEG的BELNR(FI doc no).

这样理解吧, 一般ATAB是多是配置表(Pooled table),所以SAP需要告诉你table name

而RFBLG偏重内容, 比如你在RFBLG delete 一个BELNR, (有个VARDATA恐怕就是将BSEG的内容保存在此), SE16:BSEG就看不到它了, 我想当你check BSEG内容时实际上从DB曾是将RFBLG根据一定规则将内容display出来.

  评论这张
 
阅读(125)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018