内表详细讲解Word文档格式.docx
- 文档编号:19852401
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:20.13KB
内表详细讲解Word文档格式.docx
《内表详细讲解Word文档格式.docx》由会员分享,可在线阅读,更多相关《内表详细讲解Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
unique(唯一)/non-unique(不唯一,区别数据库,可以有重复记录)
Components:
构成键的字段,顺序敏感,顺序不同
tablekey也就不一样
(三)、Dataaccesstype数据访问类型
Indexaccess根据行号访问
Keyaccess根据tablekey访问
三、内表的三种类型
Standardtable
适合通过index访问表的每条记录情形。
访问时间和表的记录数目大小成线性关系。
访问:
indexaccess(推荐),keyaccess
Tablekey:
non-unique
Sortedtable
适合当你输入记录时就根据主键排序的情形。
天生就有排序的功能,插入数据后就会按照tablekey排序
访问:
indexaccess,keyaccess(推荐)
unique/non-unique
Hashedtable
适合于通过主键来访问操作表的记录的情形。
无论表记录的多少,访问时间是常量。
当你想要创建一个类似数据库表的内表时,就使用Hashedtable。
数据量相当大时考虑用这种内表。
onlykeyaccess
Tablekey:
unique.
四、内表的操作
(一)、创建内表
DATA:
BEGINOFTY_OUTLIST,
USERLIKEAGR_USERS-UNAME,"
用户名
NAMELIKEADRP-NAME2,"
用户姓名
DEPARTLIKEADCP-DEPARTMENT,"
部门
ROLENAMELIKEAGR_USERS-AGR_NAME,"
用户角色
ROLETEXTLIKEAGR_TEXTS-TEXT,"
角色描述
ENDOFTY_OUTLIST.
DATA:
T_OUTLISTLIKESTANDARDTABLEOFTY_OUTLISTWITHHEADERLINE.
(二)、整个内表的操作
1、内表赋值
内表的整体赋值:
如果想一次将内表的全部内容复制到另一内表中,请使用MOVE语句或赋值操作符(=),用法如下:
MOVE<
itab1>
TO<
itab2>
.该语句等价于:
<
=<
.
report:
zdz.
BEGINOFLINE,
COL1,
COL2,
ENDOFLINE.
DATAETABLIKELINEOCCURS10WITHHEADERLINE.
DATAFTABLIKELINEOCCURS10.
LINE-COL1='
A'
.LINE-COL2='
B'
APPENDLINETOETAB.
*因为ETAB是带表头行的,所以ETAB[]才是内表,ETAB是工作区
*所以MOVEETABTOFTAB.会报错(类型不匹配)
MOVEETAB[]TOFTAB.
LOOPATFTABINTOLINE.
WRITE:
/LINE-COL1,LINE-COL2.
ENDLOOP.
2、内表初始化
初始化内表的作用是清空内表所有的数据行,将内表恢复到填充或赋值之前的状态。
初始化内表要注意的问题仍然是初始化有表头行和无表头行的内表的区别,以及初始化内表和表头行的区别。
(1).
Clear用法:
clearitab。
正确的应该是:
对与一个有工作区的内表itab,clearitab清空的是工作区,而不清空内表;
clearitab[]是清空内表,而不清空工作区。
REPORTdemo_int_tables_append.
*append...to
BEGINOFwa,
col1
(1)TYPEc,
col2TYPEi,
ENDOFwa.
DATAitabLIKEstandardtableofwawithheaderline.
DO3TIMES.
itab-col1=sy-index.itab-col2=sy-index**2.
APPENDitab.
ENDDO.
LOOPATitab.
/itab-col1,itab-col2.
skip.
*不是说带表头行的内表,itab代表表头行(工作区),itab[]才代表内表吗?
*在loopat循环中itab就代表内表,而不是表头行(工作区)
loopatitabintowa.
write:
/wa-col1,wa-col2.
endloop.
*不管什么时候itab[]都代表内表本身
loopatitab[]intowa.
*在不在loop循环中的时候才是itab代表表头行,而itab[]代表内表本身
write:
*对与有表头行的内表,clearitab和clearitab[]的区别
clearitab.
clearitab[].
*下边会多输出一个零,是工作区中的默认值(字符型默认值为空,数值型默认值为0)
(2)
.
Refresh和Free
这两个关键字的作用基本相同,都是只能清空内表中的数据,而不能清空内表同名工作区中的数据。
区别就是refresh并不会同时将预先分配给内表的内存释放,而free则同时释放了预先分配给内表的内存(默认的是8K)。
clear也不释放掉内存。
*定义工作区wa
BEGINOFwa,
*下边定义了一个内表itab,(noworkarea,noheaderline)
DATAitabLIKEstandardTABLEOFwawithheaderline.
wa-col1=sy-index.wa-col2=sy-index**2.
APPENDwaTOitab.
LOOPATitabINTOwa.
/wa-col1,wa-col2.
itab-col1='
x'
itab-col2=100.
*refresh和free一样都只是清空内表中数据,而不清工作区
refreshitab.
*freeitab只是清空了内表中数据,没清空工作取中数据
*freeitab.
*用ifitabisnotinitial来判别内表工作区是否为空
ifitabisnotinitial.
write/'
itabisnotempty'
endif.
*ifitab[]isinitial来判别内表是否为空
ifitab[]isinitial.
itab[]isempty'
write:
/itab-col1,itab-col2.
3、内表比较
“内表的表关键字在访问内表和内表排序中起着相当重要的作用,在内表定义语句中,使用WITHkey指定内表关键字,该项为可选项,如果不指定,则系统会使用默认(标准)关键字,如果程序员指定,则有以下形式:
1.
如果内表行是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能是内表或者引用类型,但是可以是嵌套的结构体。
REPORTdemo_structure.
types:
BEGINOFname,
title(5)TYPEc,
first_name(10)TYPEc,
last_name(10)TYPEc,
ENDOFname.
BEGINOFmylist,
clientTYPEname,
numberTYPEi,
ENDOFmylist.
DATA:
listtypetableofmylist
withnon-uniquekeynumber
withheaderline.
2.如果内表的整行都是由基本类型字段组成,则可以将内表的整个行定义为表关键字。
如果内表字段本身是结构化类型,则不宜指定整行作为关键字段。
所以下边的做法是不好的。
REPORTdemo_structure.
withnon-uniquekeytableline
3.如果不指定任何关键字,则系统会默认的选择关键字段。
(扁平结构内表的默认关键字段为非数字和非内表的组件字段)如果内表行是由单个基本类型组成,则默认关键字为整个行。
如果内表行中包含有内表类型字段,则没有默认关键字。
4.关键UNIQUEKEY(不可以出现关键字相同的数据行)/NON-UNIQUEKEY(可以出现关键字相同的数据行)是决定了内表中具有相同关键字的数据行是否可以重复出现,在标准内表中不能用UNIQUEKEY,而且不需要特别指定NON-UNIQUEKEY。
所以这个关键字在标准内表中一般都不需要写。
REPORT:
ZDZ.
BEGINOFITABOCCURS10,
LAND(3)TYPEC,
NAME(10)TYPEC,
AGETYPEI,
WEIGHTTYPEPDECIMALS2,
ENDOFITAB.
ITAB-LAND='
USA'
.ITAB-NAME='
Nancy'
ITAB-AGE=35.ITAB-WEIGHT='
45.00'
APPENDITAB.
Howard'
ITAB-AGE=40.ITAB-WEIGHT='
95.00'
GB'
Jenny'
ITAB-AGE=18.ITAB-WEIGHT='
50.00'
F'
Michele'
ITAB-AGE=30.ITAB-WEIGHT='
60.00'
G'
Karl'
ITAB-AGE=60.ITAB-WEIGHT='
75.00'
SORTITAB.
LOOPATITAB.
/ITAB-LAND,ITAB-NAME,ITAB-AGE,ITAB-WEIGHT.
SKIP.
SORTITABDESCENDINGBYLANDWEIGHTASCENDING.
在此创建有表头行的内表ITAB并用5行对其进行填充。
首先根据其标准关键字(LAND和NAME)进行排序。
然后根据定义为LAND和WEIGHT的排序关键字进行排序。
一般排序顺序定义为降序,但对于WEIGHT,定义为升序。
这就是为什么在第二个SORT语句之后包含NAME字段“NANCY”的行在包含NAME字段“HOWARD”的行之前输出。
4、内表排序
<
operator>
对于<
,可以使用比较所有字段类型中的表格内列出的所有操作符
(EQ、=、NE、<
>
、>
、GE、>
=、LE、<
=、GT、>
、LT、<
)。
进行内表比较的第一个条件是它们包含的行数。
内表包含的行数越多,则内表就越大。
如果两个内表行数相同,则逐行、逐个组件进行比较。
如果表格行的组件本身就是内表,则进行递归比较。
如果使用等于操作符以外的操作符,则系统找到一对不相等的组件后就立即停止比较并返回该结果。
对于有表头行的内表,则可在表格名之后使用方括号([])以将表格工作区域和表格体区别开来。
COL1TYPEI,
COL2TYPEI,
ITABLIKELINEOCCURS10,
JTABLIKELINEOCCURS10.
LINE-COL1=SY-INDEX.
LINE-COL2=SY-INDEX**2.
APPENDLINETOITAB.
MOVEITABTOJTAB.
LINE-COL1=10.LINE-COL2=20.
APPENDLINETOITAB.
IFITABGTJTAB.
WRITE/'
ITABGTJTAB'
ENDIF.
APPENDLINETOJTAB.
IFITABEQJTAB.
ITABEQJTAB'
LINE-COL1=30.LINE-COL2=80.
IFJTABLEITAB.
JTABLEITAB'
LINE-COL1=50.LINE-COL2=60.
IFITABNEJTAB.
ITABNEJTAB'
IFITABLTJTAB.
ITABLTJTAB'
其输出为:
ITABGTJTAB
ITABEQJTAB
JTABLEITAB
ITABNEJTAB
ITABLTJTAB
在此创建两个内表:
ITAB和JTAB。
用3行填充ITAB并将其复制到JTAB中。
然后将另一行附加给ITAB并且第一个逻辑表达式测试ITAB是否大于JTAB。
在将同一行附加给JTAB之后,第二个逻辑表达式测试两个表格是否相等。
然后将另一行附加给ITAB,第三个逻辑表达式测试JTAB是否小于或等于ITAB。
然后将一行附加给JTAB,其此组件内容与ITAB最后一行中组件的内容不相等。
下一逻辑表达式测试ITAB是否与JTAB不相等。
从中找到ITAB和JTAB不同之处的第一个组件是最后一个表格行中的COL1。
ITAB是30列而JTAB则是50列。
因此在最后一个逻辑表达式中,ITAB小于JTAB。
5、内表属性
如果在处理过程中想知道内表一共包含多少行,或者想知道定义的OCCURS参数的大小,请使用DESCRIBE语句。
DATAITABLIKELINEoccurs10.
LINTYPEI,
OCCTYPEI.
DESCRIBETABLEITABLINESLINOCCURSOCC.
WRITE:
/LIN,OCC.
DO1000TIMES.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详细 讲解
![提示](https://static.bdocx.com/images/bang_tan.gif)