﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-路人乙-文章分类-ABAP学习</title><link>http://www.blogjava.net/yemen/category/36503.html</link><description>心有多大，舞台就有多大。</description><language>zh-cn</language><lastBuildDate>Tue, 23 Dec 2008 17:57:41 GMT</lastBuildDate><pubDate>Tue, 23 Dec 2008 17:57:41 GMT</pubDate><ttl>60</ttl><item><title>[摘]内表达定义和使用（二）</title><link>http://www.blogjava.net/yemen/articles/247745.html</link><dc:creator>上帝也犯困</dc:creator><author>上帝也犯困</author><pubDate>Mon, 22 Dec 2008 05:48:00 GMT</pubDate><guid>http://www.blogjava.net/yemen/articles/247745.html</guid><wfw:comment>http://www.blogjava.net/yemen/comments/247745.html</wfw:comment><comments>http://www.blogjava.net/yemen/articles/247745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemen/comments/commentRss/247745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemen/services/trackbacks/247745.html</trackback:ping><description><![CDATA[<div class="content">
<p><strong>2. 内表定义的ABAP Code</strong> </p>
<p>通过ABAP Code定义内表有三种方式，<br />
With an implicitly defined (bound) type<br />
With an explicitly defined local type<br />
With an explicitly defined global type </p>
<p>内表定义的文法如下图所示： </p>
<p style="text-align: center"><img title="Internal table defination syntax" height="377" alt="Internal table defination syntax" src="http://www.imalex.net/files/abap-3-3.jpg" width="550" /> </p>
<p style="text-align: left">文法中的STANDARD/ SORTED/HASHED TALBE指定了该内表示什么类型，内表定义时所引用的行类型（data_type, data_object, global_itab_type, local_itab_type, itab_data_object等）可以是本地或全局定义的类型或表，也可以是一个Data object。 WITH key_def用于指定内表的key列定义，UNIQUE或NON-UNIQUE指定了该内表的key列性质。需要注意的是，如果不适用WITH key_def addition定义key列，可以通过DEFAULT KEY指定默认字段为key列，对于Standard tables，默认的key列是由所有CHAR-LIKE字段组成的(C,N,D,T,X,STIRNG,XSTRING)。 </p>
<p style="text-align: left">table kind和key definition有多种组合，简要列出来如下： standrad table(only non-unique), sorted table(unique or non-unique), hashed table(only unique)。 </p>
<p style="text-align: left">standard table最常用，可以用以下简化方式定义：<br />
DATA: itab_name TYPE TABLE OF line_type. ABAP运行时将此行代码编译为以下代码：<br />
DATA: itab_name TYPE [STANDARD] TABLE OF line_type [WITH NON-UNIQUE DEFAULT KEY]. </p>
<p style="text-align: left">一个完整的定义如下： </p>
<p style="text-align: center"><img title="Internal table definition full code" height="369" alt="Internal table definition full code" src="http://www.imalex.net/files/abap-3-4.jpg" width="495" /> </p>
<p style="text-align: left">如上图所示代码为通过参考一个本地定义的LINE TYPE的STANDARD TABLE.如果将TYPE STANDARD TABLE替换为TYPE SORTED TABLE 或TYPE HASHED TABLE将定义两个结构完全一样的另外两种类型的内表。需要注意的是，对于SORTED TABLE，数据存储的顺序不同。定义内表的时候并一定需要通过INITIAL SIZE指定初始内存大小，在程序执行过程中，如果内表的大小不足，系统会自动扩展内表所占内存空间，而且没有最大限制。 </p>
<p style="text-align: left">Generic table kind是指没有使用TABLE TYPE明确定义是哪种内表，通常用于子程序参数定义。 </p>
</div>
<img src ="http://www.blogjava.net/yemen/aggbug/247745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemen/" target="_blank">上帝也犯困</a> 2008-12-22 13:48 <a href="http://www.blogjava.net/yemen/articles/247745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>abap的表</title><link>http://www.blogjava.net/yemen/articles/246140.html</link><dc:creator>上帝也犯困</dc:creator><author>上帝也犯困</author><pubDate>Sat, 13 Dec 2008 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/yemen/articles/246140.html</guid><wfw:comment>http://www.blogjava.net/yemen/comments/246140.html</wfw:comment><comments>http://www.blogjava.net/yemen/articles/246140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemen/comments/commentRss/246140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemen/services/trackbacks/246140.html</trackback:ping><description><![CDATA[transparent table 透明表：对应物理数据库的物理表<br />
<br />
struture 结构：只是一个数据结构，有很多字段，只是数据定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但不存放数据，在物理表没有对应的表。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过sql语句查询结构不起作用，但是在写程序的时候会经常用到struture.<br />
<br />
view 视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过sql语句能查询视图，就算是几个透明表的联合<br />
<br />
pool table :见另一篇说明<br />
<br />
cluster table <br />
<img src ="http://www.blogjava.net/yemen/aggbug/246140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemen/" target="_blank">上帝也犯困</a> 2008-12-13 17:27 <a href="http://www.blogjava.net/yemen/articles/246140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】pool table 和 cluster table</title><link>http://www.blogjava.net/yemen/articles/246134.html</link><dc:creator>上帝也犯困</dc:creator><author>上帝也犯困</author><pubDate>Sat, 13 Dec 2008 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/yemen/articles/246134.html</guid><wfw:comment>http://www.blogjava.net/yemen/comments/246134.html</wfw:comment><comments>http://www.blogjava.net/yemen/articles/246134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemen/comments/commentRss/246134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemen/services/trackbacks/246134.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td>
            <div id="art_title">
            <div id="title"><img src="http://www.kaola.cn/bImg/0/ico_page.gif" align="absMiddle" border="0"  alt="" />&nbsp;&nbsp;<a href="http://art.kaola.cn/u/%E5%8D%97%E6%B5%B7%E6%B0%B4%E5%93%A5/382425.html">关于cluster table(簇表)BSEG</a></div>
            <div id="number">2008-08-11 09:32&nbsp;&nbsp;<a onclick="showOrCloseArt();" href="javascript:;"><img id="artShowIco" src="http://www.kaola.cn/bImg/0/ico_arrow.gif" align="absMiddle" border="0"  alt="" /></a></div>
            </div>
            </td>
        </tr>
        <tr>
            <td>
            <div id="tag">&nbsp;<img src="http://www.kaola.cn/bImg/0/ico_tag.gif"  alt="" />&nbsp;&nbsp;标签：<a href="http://www.kaola.cn/q.do?s=sTag&amp;w=cluster" target="_blank">cluster</a>，&nbsp;<a href="http://www.kaola.cn/q.do?s=sTag&amp;w=table" target="_blank">table</a>，&nbsp;</div>
            </td>
        </tr>
        <tr id="artShowInfo">
            <td>
            <div id="art_w">
            <table cellspacing="0" cellpadding="0" width="96%" align="center" border="0">
                <tbody>
                    <tr>
                        <td style="word-break: break-all; word-wrap: break-word">
                        <div>
                        <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: green; font-family: Arial">Pooled table</span><span style="font-size: 12pt; color: green; font-family: 宋体">（池表</span><span style="font-size: 12pt; color: green; font-family: Arial">/</span><span style="font-size: 12pt; color: green; font-family: 宋体">共享表格）：例如</span><span style="font-size: 12pt; color: green; font-family: Arial">TBSL </span></p>
                        <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: blue; font-family: Arial">Table pool (</span><span style="font-size: 12pt; color: blue; font-family: 宋体">表池</span><span style="font-size: 12pt; color: blue; font-family: Arial">/</span><span style="font-size: 12pt; color: blue; font-family: 宋体">表存储池</span><span style="font-size: 12pt; color: blue; font-family: Arial">)</span><span style="font-size: 12pt; color: blue; font-family: 宋体">：例如</span><span style="font-size: 12pt; color: blue; font-family: Arial">ATAB</span></p>
                        <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: fuchsia; font-family: Arial">Cluster table (</span><span style="font-size: 12pt; color: fuchsia; font-family: 宋体">簇表</span><span style="font-size: 12pt; color: fuchsia; font-family: Arial">/</span><span style="font-size: 12pt; color: fuchsia; font-family: 宋体">聚集表</span><span style="font-size: 12pt; color: fuchsia; font-family: Arial">)</span><span style="font-size: 12pt; color: fuchsia; font-family: 宋体">：</span><span style="font-size: 12pt; color: fuchsia; font-family: Arial">bseg<font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;table cluster (</font></span><span style="font-size: 12pt; color: fuchsia; font-family: 宋体">表簇</span><span style="font-size: 12pt; color: fuchsia; font-family: Arial">)</span><span style="font-size: 12pt; color: fuchsia; font-family: 宋体">：</span><span style="font-size: 12pt; color: fuchsia; font-family: Arial">:RFBLG<font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></p>
                        <p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: #993366; font-family: Arial">Transp. Table(</span><span style="font-size: 12pt; color: #993366; font-family: 宋体">转帐表</span><span style="font-size: 12pt; color: #993366; font-family: Arial">) </span><span style="font-size: 12pt; color: #993366; font-family: 宋体">即是</span><span style="font-size: 12pt; color: #993366; font-family: Arial">transparent table(</span><span style="font-size: 12pt; color: #993366; font-family: 宋体">透明表</span><span style="font-size: 12pt; color: #993366; font-family: Arial">)</span></p>
                        <p><font size="3"><font face="宋体"><font color="#000000">PS: 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</font><font color="#000000">层的一个物理表</font></font></font></p>
                        </div>
                        <div>&nbsp;</div>
                        <div>转自：<a href="http://suyupingsap.spaces.live.com/default.aspx?_c02_owner=1" target="_blank"><u><font color="#0000ff">http://suyupingsap.spaces.live.com/default.aspx?_c02_owner=1</font></u></a></div>
                        <div>今天接到的第一个task是通过一定可知的parameter数据,提取到BSEG,BKPF等表里的某些数据,本能的用inner join和Query试了试,结果发现都不可以被使用,系统提示,BSEG为Cluster talbe,不可以使用inner join,才发现,自己是第一次正面cluster table 这个东西</div>
                        <div>然后赶紧查询一些相关信息,有用的,先发在下面吧</div>
                        <div>
                        <div>
                        <div>FI 的簇表的使用(转)</div>
                        <table style="table-layout: fixed">
                            <tbody>
                                <tr>
                                    <td>
                                    <div>
                                    <p><font color="#0000ff">BSAD：应收明细（已清帐）<br />
                                    BSID：应收明细（未清帐）<br />
                                    BSAS：总帐明细（已清帐）<br />
                                    BSIS：总帐明细（未清帐）<br />
                                    BSAK：应付明细（已清帐）<br />
                                    BSIK：应付明细（未清帐） </font></p>
                                    <p><font color="#0000ff">BSEG主要通过&#8220;凭证号&#8221;&#8220;会计年度&#8221;&#8220;行号&#8221;和这六张表关联 <br />
                                    一般情况下一笔业务产生的凭证都是未清的，那么：如果该业务行是客户相关的，则被记录到BSID；<br />
                                    如果该业务行是供应商相关的，则被记录到BSIK；<br />
                                    无论和客户相关还是和供应商相关，都是和总帐相关，所以也会有记录到BSIS；<br />
                                    但是如果这笔业务被清帐了，则相应的记录会从BSIS转移到BSAS </font></p>
                                    <p><font color="#0000ff">一般情况下：应收账款、预收账款、其他应收款、应收汇票等科目既和客户相关，又和未清项管理的总帐科目相关；<br />
                                    应付账款、预付账款、其他应付款、应付汇票等科目既和供应商相关，又和未清项管理的总帐科目相关； <br />
                                    其他总帐科目一般不启用未清项管理，所以记录一般都放在BSIS中。 <br />
                                    BSEG本身是一个 Cluster Table(簇表)，BSEG就是由上述的六大表的集成，当要读取&#8221;BSEG&#8221;Table时就等于去读取那六个表，这样你可以想像它读起来会就多慢。对於簇表或Pool Table，都是SAP系统本身在使用的，因此簇表本身是不存在资料库实体的，虽然是可以在ABAP使用，不过还是有一些限制： 1.不能使用select distinct or group by语法 2.不能使用Native SQL 3.不能使用specify field names after the order by clause 4.不能在建立次索引 5.查询时一定要用KEY FIELD</font> </p>
                                    <p>刚刚看到一份数据表资料的提示信息如下: </p>
                                    <p>AVOID USING BSEG!!!<br />
                                    Use BSID, BSIK, and/or BSIS for items<br />
                                    and BSAD, BSAK, and/or BSAS for cleared items </p>
                                    <p>猜想一下,如果要select table 应该从这六个表里取数据,而不应该从BSEG里取了吧,呵呵,有点灵感了<a href="http://shared.live.com/VIf!VWmJbs6tK-ObyYk28Q/emoticons/smile_angel.gif" target="_blank"><img title="考拉网" height="19" alt="考拉网" src="http://shared.live.com/VIf!VWmJbs6tK-ObyYk28Q/emoticons/smile_angel.gif" width="19" border="0" /></a> </p>
                                    <p>Cluster Table本身是一個Key Field集合的Table，他在DB中實體的Table name是RFBLG，用SE11查一下你會發現它只有幾個Key Field，跟BSEG差了一堆，所以BSEG是SAP的東西，他本身是FITable的集合體，意思就是說當你每查一筆BSEG的ROW ，DB就要同步去把 RFBLG的cluster table MAP table都找出來組成一筆記錄回傳給SAP。<br />
                                    <br />
                                    Cluster Table 本來就是SAP的應用系統在使用，主要是加快處理效能這跟Oracle 的Cluster table有些類似<br />
                                    <br />
                                    所以ABAP在使用Cluster &amp; Pool Table本來就有些限制的，如果去了解一下Cluster table的定義你就會知道，在Query中如果沒有小心使用這個Table，那你的PRD 系統會付出一定的代價的，用ST04 去查一下這個Table的大小你會嚇一跳的<br />
                                    <br />
                                    我記的沒錯的話，在21天學會ABAP中有一節是專門在講Cluster table，另外在 <a href="http://www.sapfans.com/" target="_blank"><u><font color="#0000ff">www.sapfans.com</font></u></a> 中去search 一下，你會發現有一堆文章都在討論 Cluster Table，小心的使用它會很好用的<br />
                                    <br />
                                    一般來說要從Cluster出發的話，除了基本的限制外，一定要從Key Field下手，如果一次處理量大於500筆，最好分次處理 </p>
                                    <p>(摘自SAP之家论坛) </p>
                                    <p>BSEG是一个CLUSTER TABLE（簇表）。CLUSTER TABLE和POOL TABLE在SAP中形式是TABLE CLUSTER（表簇）和TABLE POOL（表池），这两种表实际是由若干表组成的。一般CLUSTER TABLE是由若干大的表（如财务凭证数据等业务数据表）组成的，而POOL TABLE是由许多小的表组成的。所以，在INNER JOIN的时候，由于不是和一个表JOIN所以找不到连接的KEY。如果真要用INNER JOIN的话，可以使用这类表的索引表。如BSEG的索引表有：BASAS,BASIS,BSAK,BSIK,BSAD,BSID </p>
                                    </div>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </div>
                        </div>
                        <p>(摘自<a href="http://www.erp.org.tw/talk/content.asp?discuss_no=3&amp;content_no=4054" target="_blank"><font color="#8c7d18"><u>http://www.erp.org.tw/talk/content.asp?discuss_no=3&amp;content_no=4054</u></font></a>) </p>
                        <p><font color="#333366" size="2">1) pooled table:這是用來放置一些控制程式流程參數資料的TABLE。包括SCREEN流程.程式參數.暫存資料等<br />
                        (2)cluster table:用來放置連續性的相關資料(如transaction document)這是一個值得你特別注意的TABLE，因為它通常很大，若您直接access　cluster table,效率會很差,像bseg就是,所以請盡量避免access該table,您應該可以找到其他的table來取代. </font></p>
                        <br />
                        平台提供：<a href="http://www.kaola.cn/" target="_blank">http://www.kaola.cn</a></td>
                    </tr>
                </tbody>
            </table>
            <div id="addres">本文网址：<a href="http://art.kaola.cn/u/%E5%8D%97%E6%B5%B7%E6%B0%B4%E5%93%A5/382425.html">http://art.kaola.cn/u/%E5%8D%97%E6%B5%B7%E6%B0%B4%E5%93%A5/382425.html</a> [<a href="javascript:copyArtUrl('关于cluster table(簇表)BSEG','http://art.kaola.cn/u/南海水哥/382425.html')">复制</a>]</div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</span>
 <img src ="http://www.blogjava.net/yemen/aggbug/246134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemen/" target="_blank">上帝也犯困</a> 2008-12-13 17:06 <a href="http://www.blogjava.net/yemen/articles/246134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作内表</title><link>http://www.blogjava.net/yemen/articles/245104.html</link><dc:creator>上帝也犯困</dc:creator><author>上帝也犯困</author><pubDate>Mon, 08 Dec 2008 13:30:00 GMT</pubDate><guid>http://www.blogjava.net/yemen/articles/245104.html</guid><wfw:comment>http://www.blogjava.net/yemen/comments/245104.html</wfw:comment><comments>http://www.blogjava.net/yemen/articles/245104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemen/comments/commentRss/245104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemen/services/trackbacks/245104.html</trackback:ping><description><![CDATA[<p>REPORT&nbsp; YTEST0014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .</p>
<p>DATA A_SPFLI TYPE SPFLI.</p>
<p>DATA TA_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.</p>
<p>ULINE.<br />
&nbsp; WRITE / '使用工作区'.<br />
ULINE.</p>
<p>SELECT * INTO CORRESPONDING FIELDS OF A_SPFLI FROM SPFLI UP TO 5 ROWS.<br />
WRITE: / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A_SPFLI-CITYTO.</p>
<p>ENDSELECT.</p>
<p>ULINE.<br />
&nbsp;&nbsp; WRITE / '使用内表'.<br />
ULINE.</p>
<p>select * into corresponding FIELDS OF TABLE TA_SPFLI FROM SPFLI UP TO 5<br />
ROWS.</p>
<p>LOOP AT TA_SPFLI.<br />
&nbsp;&nbsp; WRITE: / TA_SPFLI-CONNID,TA_SPFLI-CARRID,TA_SPFLI-CITYFROM,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TA_SPFLI-CITYTO.<br />
ENDLOOP.</p>
<p>ULINE.<br />
&nbsp;&nbsp;&nbsp; WRITE / '将内表数据转移至工作区'.<br />
ULINE.</p>
<p>LOOP AT TA_SPFLI INTO A_SPFLI.<br />
&nbsp;&nbsp; WRITE: / A_SPFLI-CONNID,A_SPFLI-CARRID,A_SPFLI-CITYFROM,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A_SPFLI-CITYTO.<br />
ENDLOOP.</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/yemen/aggbug/245104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemen/" target="_blank">上帝也犯困</a> 2008-12-08 21:30 <a href="http://www.blogjava.net/yemen/articles/245104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【摘】内表的定义和使用</title><link>http://www.blogjava.net/yemen/articles/244784.html</link><dc:creator>上帝也犯困</dc:creator><author>上帝也犯困</author><pubDate>Sat, 06 Dec 2008 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/yemen/articles/244784.html</guid><wfw:comment>http://www.blogjava.net/yemen/comments/244784.html</wfw:comment><comments>http://www.blogjava.net/yemen/articles/244784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemen/comments/commentRss/244784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemen/services/trackbacks/244784.html</trackback:ping><description><![CDATA[<p><span style="font-size: medium"><strong>一、Internal Table的定义</strong></span> </p>
<p><strong>1. 概念</strong> </p>
<p>Internal Table中文成为内表，是ABAP中一种比较特殊的数据对象，它用于存储数据集，一行一行存储某一固定格式的数据。数据集中中每一个行的每一个数据对象都可以访问。内表中的一行称作 Table Line或Table Entry。内表的行数可以自动扩展，其最大行数的限制依赖于系统的参数设定。内表结构可以包含一个单独的数据元素，一个结构也可以是一个内表，甚至更复杂。 </p>
<p style="text-align: center"><img title="Internal Table" height="220" alt="Internal Table" src="http://www.imalex.net/files/abap-3-1.jpg" width="530" /> </p>
<p>内表的定义由以下方面完全定义：<br />
<strong>Line type</strong>: 行的数据结构中每一列的属性，一般用structure type指定line type，实际上任意数据类型都可以。<br />
<strong>Key definition</strong>: key列及其顺序的定义被用于鉴别内表中不同的行，内表中的key列可以定义为unique 或non-unique，这一点取决于我们访问内表的方式。如果是unique的，内表中所有行不能出现相同Key值的字段。<br />
<strong>Access type:</strong> key access方式是指我们访问内表时通过key列的内容查询数据；index access方式是指我们通过行的顺序编号访问相应的行（并不是所有类型的内表都可以这样访问）<br />
<strong>Table kind:</strong> Standard tables, Sorted tables, Hashed tables，这三种类型的内表在key列的设置、Access type有所不同，各有特点，使用的时候需要根据逻辑特性选择相应的类型。 </p>
<p style="text-align: center"><img title="Internal table's table type" height="271" alt="Internal table's table type" src="http://www.imalex.net/files/abap-3-2.jpg" width="459" /> </p>
<p style="text-align: left"><strong>Standard tables</strong>: 在这种内表中，系统会自动为每一行数据编号，我们可以通过index 和 key两种方式访问某一行。<br />
<strong>Sorted tables</strong>: 在这种内表中，数据总是按照key字段排序后保存的，我们也可以通过index 和 key两种方式访问某一行。<br />
<strong>Hashed tables</strong>: 在这种内表中，数据记录的管理方法是为了运行时优化，定义这种表的时候key列必须是unique的，访问的时候也只能通过key access访问。 </p>
<p style="text-align: left">从三种类型内表(Internal table)的特性中我们可以推断，当我们的程序对一个内表进行的访问大多数情况下是逐行处理，使用standard table就足够了；如果需要对一个内表的数据进行固定顺序排序，并且多数情况下通过key 访问，选用sorted table比较好；第三种情况，如果内表仅用于根据key列查询，我们应该选用Hashed table，可以极大的提高性能，尤其是在数据量较大或查询频繁的程序中。 </p>
 <img src ="http://www.blogjava.net/yemen/aggbug/244784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemen/" target="_blank">上帝也犯困</a> 2008-12-06 16:44 <a href="http://www.blogjava.net/yemen/articles/244784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>