BW相关ABAP基础知识Final.docx
《BW相关ABAP基础知识Final.docx》由会员分享,可在线阅读,更多相关《BW相关ABAP基础知识Final.docx(16页珍藏版)》请在冰豆网上搜索。
BW相关ABAP基础知识Final
1.系统内部常用变量:
SY-UZEIT:
当前系统时间;
SY-INDEX:
当前LOOP循环过的次数
SY-TABIX:
当前处理的是internaltable的第几笔
SY-TMAXL:
Internaltable的总笔数
2.Tables关键字
用来声明TableWorkArea的数据
TABLES:
SPFL.
SELECT*FROMSPFL.
WRITE:
SPFL-MANDT,SPFL-CARRID,SPFL-CONNECTION.
ENDSELECT.
3.InternalTable的声明
3.1内表格式1
TYPES|DATAitab{TYPE|LIKE}tabkindOF{linetype|lineobj}[WITHkey][INITIALSIZEn].
Example:
DATAItab_CompanyLIKEHASHEDTABLEOFCompanyWITHUNIQUEKEYName.
3.2内表格式2
DATA:
BEGINOF OCCURS ,
TYPE,
[ TYPE,
TYPE,
ENDOF .
3.3内表格式3
DATA OCCURS [WITH HEADER LINE].
4.工作区及内表转换
1.工作区.程序对内表的操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区(WorkArea).如果程序需要从关系数据库中取数据到内表各行中,必须先将数据读入工作区,然后把工作区中的数据赋给内表的行.工作区必须具有和内表的行一致或者可相互转换的数据结构.
2.表行头.在创建内表对象的同时可以隐式地定义一个同名工作区.创建了带表头的内表之后,可以认为程序中存在两个数据对象,一个是内表,另一个与内表结构相同的结构体.如果一个语句中,该名称同时代表内表或同名表的工作区,则需要在内表名称之后加“[]”。
内表名称之后有‘[]’
4.1APPEND语句
格式1:
APPENDTO
格式2:
APPENDLINESOF[FROM][TO]TO.
将的元素加入至中,可选取自至的范围.
4.2COLLECT语句
格式:
COLLECT[INTO]
COLLECT指令也是将元素加入Internaltable中,与APPEND的区别是:
COLLECT指令在非数值栏位相同的情况下,将数值栏位汇总
4.3INSERT语句
格式:
INSERT[INTO][INITIALLINEINTO][INDEX]
INSERTLINESOF[FROMTO]INTOINDEX
其中[INDEX]:
为internaltable的记录号.(新加入的元素放在此记录前面)
4.4DELETE语句
DELETEitabINDEXidx.
DELETETABLEitabFROMwa.
DELETETABLEitabWITHKEYk1=f1…ki=fi.
DELETETABLE[FROMn1][TOn2][WHERE].
DELETEADJACENTDUPLICATESFROMitab删除重复数据
5.内表操作
5.1LOOP语句
格式一:
LOOPAT[INTO][FROMTO][WHERE]
ENDLOOP.
Example:
LOOP AT ITAB INTO LINE WHERE COL1>100.
WRITE:
/ SY-TABIX,LINE-COL1.
ENDLOOP.
仅读取COL1>100的元素
5.2READ语句
READTABLE[INTO][INDEX/WITHKEY]
Example:
DATA:
BEGINOFITABOCCURS10,
COL1TYPEI,
COL2TYPEI,
ENDOFITAB.
DO10TIMES.
ITAB-COL1=SY-INDEX.
ITAB-COL2=SY-INDEX*2.
APPENDITAB.
ENDDO.
READTABLEITABINDEX3.
(或者:
READTABLE ITABWITHKEYCOL1=3.)
WRITE:
/'ITAB-COL1=',ITAB-COL1,'ITAB-COL2=',ITAB-COL2.
执行结果同样是:
ITAB-COL1=3
ITAB-COL2=6.
Example:
READ TABLE ITAB INTO LINE INDEX 5
读取ITAB的第5个元素资料,放入LINE的栏位中根据栏位内容寻找
语法2:
READ TABLE INTO
Example:
ITAB-COL1='ABC'.
READ TABLE ITAB INTO LINE.
找出ITAB中COL1栏位内容是ABC的元素,找到的值放入LINE中
若找到SY-SUBRC传回0,找不到则传回4,必须声明有workarea.
5.2.1BinarySearch
二分查找将会代替线性查找,这将减少对大型表的搜索时间(至少在100以上的数据)。
对于二分查找,表必须根据特殊的搜索关键字来升序排列,否则这个搜索不会找到正确的行。
5.3MODIFY语句
修改internaltable中的值
格式:
MODIFY[FROM][INDEX][TRANSPORTING…][WHERE]
如果只希望更新部分字段的值,可以使用TRANSPORTING选项.MODIFYitabFROMwaTRANSPORTINGf1,f2…WHEREcond.使用WHERE选项修改多行.
Example:
READTABLEITABINDEX3.
LINE-COL1=29.
MODIFYITABFROMLINETRANSPORTINGCOL1.
将第三笔记录的COL1栏位的值修改为29.
5.4MOVE语句
整体复制内表.如果想将内表的全部内容复制到另一个内表中,可以进行整体赋值操作,使用MOVE或”=”.MOVEitab1TOitab2.Itab1=itab2.
6.OPENSQL
6.1SELECT…ENDSELECT语句
SELECT[INTO][FROM
[GROUPBY][ORDERBY]
其中:
指定要抓取的栏位
将读取的记录存放在workarea中
抓取资料的条件
指定按那些栏位分组
排序的栏位及方式
相关的系统变量:
SY-SUBRC=0 表示读取数据成功
<>0表示未找到符合条件的记录
SY-DBLNT:
被处理过的记录的笔数.
相关的命令:
EXIT.退出循环.
CHECK.如果逻辑表达式成立,则继续执行,否则,开始下一次循环。
SELECT….ENDSELECT.是循环方式读取记录的。
Example:
TABLESMARD.
SELECT[DISTINCT]*FROMMARDWHEREMATNR='3520421700'.
.
ENDSELECT.
(从MARD中抓取所有料号=3520421700的资料)
6.1.1SELECTSINGLE语句(单行全部数据)
selectsingle*fromspfliintowa_spfliwherecityform=’singapore’andinto cityto=’beijing’.
6.1.2SELECTSINGLE语句(单行指定字段)
selectsinglecarridconnidfromspfliinto(wa_carrid,wa_connid)wherecityform=’singapore’ andintocityto=’beijing’.
6.1.3SELECTSINGLE语句(选择相关字段)
selectsinglecarridconnid*fromspfliintocorrespondingfieldsof
wa_spfliwherecityform=’singapore’andintocityto=’beijing’.
6.2SELECTINTO语句
◆将读取的记录放在workarea中,并且加入Internaltable中.
格式有:
...INTO
...INTOCORRESPONDINGFIELDSOF
...INTO(f1,...,fn)变量组.
...INTOTABLE
...INTOCORRESPONDINGFIELDSOFTABLE
...APPENDINGTABLE
...APPENDINGCORRESPONDINGFIELDSOFTABLE
SELECT ...INTO TABLE PACKAGE SIZE
一次读取笔记录至中
Example:
TABLES SPFLI.
DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
SELECT * FROM SPFLI INTO ITAB PACKAGE SIZE 5. 一次读取5笔记录
6.3WHERE关系语句: