SAPABAP语法整理Word文件下载.docx

上传人:b****6 文档编号:18656721 上传时间:2022-12-31 格式:DOCX 页数:29 大小:45.11KB
下载 相关 举报
SAPABAP语法整理Word文件下载.docx_第1页
第1页 / 共29页
SAPABAP语法整理Word文件下载.docx_第2页
第2页 / 共29页
SAPABAP语法整理Word文件下载.docx_第3页
第3页 / 共29页
SAPABAP语法整理Word文件下载.docx_第4页
第4页 / 共29页
SAPABAP语法整理Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

SAPABAP语法整理Word文件下载.docx

《SAPABAP语法整理Word文件下载.docx》由会员分享,可在线阅读,更多相关《SAPABAP语法整理Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

SAPABAP语法整理Word文件下载.docx

Select*fromzflight.

Check:

zflight-airln=‘LF’andzflight-fligh=‘BW222’.

Endselect.

推荐

Select*fromzflightwhereairln=‘LF’andfligh=‘222’.

2、使用聚合函数

Maxnu=0.

Select*fromzflightwhereairln=‘LF’andcntry=‘IN’.

Checkzflight-fligh>

maxnu.

Maxnu=zflight-fligh.

Selectmax(fligh)fromzflightintomaxnuwhereairln=‘LF’andcntry=‘IN’.

3、使用视图代替基本表查询

Select*fromzcntrywherecntrylike‘IN%’.[Page]

Selectsingle*fromzflightwherecntry=zcntry-cntryandairln=‘LF’.

Select*fromzcnflwherecntrylike‘IN%’andairln=‘LF’.

4、使用INTOtable代替selectendselect

Refresh:

int_fligh.

Select*fromzflightintoint_fligh.

Appendint_fligh.Clearint_fligh.

Select*fromzflightintotableint_fligh.

5、使用批量修改内表代替逐行修改

Loopatint_fligh.

Ifint_fligh-flagisinitial.

Int_fligh-flag=‘X’.

Endif.

Modifyint_fligh.

Endloop.

Modifyint_flightransportingflagwhereflagisinitial.

6、使用二分法查询,提高查询内表数据速度

Readtableint_flighwithkeyairln=‘LF’.

Readtableint_flighwithkeyairln=‘LF’binarysearch.

7、两个内表添加使用批量增加代替逐行

Loopatint_fligh1.

Appendint_fligh1toint_fligh2.

Appendlinesofint_fligh1toint_fligh2.

8、使用tablebuffering

Useofbufferedtablesisrecommendedtoimprovetheperformanceconsiderably.ThebufferisbypassedwhileusingthefollowingstatementsSelectdistinct 

Select…forupdate 

Orderby,groupby,havingclause 

Joins 

UsetheBypassbufferadditiontotheselectclauseinordertoexplicitlybypassthebufferwhileselectingthedata.

9、使用FORALLEntries

Loopatint_cntry.Selectsingle*fromzflighintoint_flighwherecntry=int_cntry-cntry.Appendint_fligh.Endloop.

Select*fromzflighappendingtableint_fligh

Forallentriesinint_cntry 

Wherecntry=int_cntry-cntry.

10、正确地使用where语句,使查询能使用索引Whenabasetablehasmultipleindices,thewhereclauseshouldbeintheorderoftheindex,eitheraprimaryorasecondaryindex

Tochooseanindex,theoptimizerchecksthefieldnamesspecifiedinthewhereclauseandthenusesanindexthathasthesameorderofthefields.OnemoretipisthatifatablebeginswithMANDT,whileanindexdoesnot,thereisahighpossibilitythattheoptimizermightnotusethatindex.

11、正确地使用MOVE语句

Insteadofusingthemove-correspondingclauseitisadvisabletousethemovestatementinstead.Attemptshouldbemadetomoveentireinternaltableheadersinasingleshot,ratherthanmovingthefieldsonebyone.

12、正确地使用innerjoinLetustakeanexampleof2tables,zairlnandzflight.Thetablezairlnhasthefieldairln,whichistheairlinecodeandthefieldlnnam,whichisthenameoftheairline.Thetablezflighthasthefieldairln,theairlinecodeandotherfieldswhichholdthedetailsoftheflightsthatanairlineoperates.[Page]

Sincethese2tablesarelogicallyjoinedbytheairlnfield,itisadvisabletousetheinnerjoin.

Selecta~airlna~lnnamb~flighb~cntryintotableint_airdet

Fromzairlnasainnerjoinzflightasbona~airln=b~airln.

Inordertorestrictthedataaspertheselectioncriteria,awhereclausecanbeaddedtotheaboveinnerjoin.

13、使用sortby代替orderby

14、避免使用SELECTDISTINCT语句

使用的ABAPSORT+DELETEADJACENTDUPLICATES代替.

定义内表与工作区最方便的方法

*定义名为ITAB的内表,内表结构参照表TABLE。

DATA:

ITABTYPETABLEOFTABLE. 

*定义名为WA的工作区,其行结构与内表ITAB相同。

WALIKELINEOFITAB. 

----------------------------------------------------------------

1.使用occurs0,定义的不再是对象,而是internaltable 

2.使用withheaderline后缀,定义为internaltable的同时也定义了一个同名对象,因此可以用以下语句:

LOOPATSTH. 

WRITE:

/STH. 

ENDLOOP. 

3.TYPE后面接结构,LIKE后面接对象 

4.OBLIGATORY为必输字段 

5.DATASEPARATER.=DATASEPARATERTYPEC.

6.关于内表的结构描述,它的当前记录数据是放在headerline中的,Occurs是分配数据缓冲区,大小不重要,系统会自动分配。

但定义内表不用occurs就需要用withheaderline,occurs语句记得是为了向下兼容。

7.occurs指明的數量是有一點學問的. 

1.當你知道可能每次用Select命中或交換的紀錄數xxx時,可指明occursxxx. 

2.如用occurs0聲明時,buffers由系統自動分配. 

8.SELECT在into时记得一般都要加上table,不然是into一个工作区,即wa,而工作区要写入内表,则需要再append,所以直接定放内表即可,内表和工作区的区别就在于工作区就相当于表头,是有一行,data定义beginofitab时不加occurs就是工作区,加了就是内表,occurs*,后面表示系统初始分配给此内表多少行,每次满时再多分配多少行,我们平常为了节约内存,一般直接用0,withheaderline是为了定义含表头的内表,平常occurs就直接带表头,而withheaderline一般是在itab1likeitaboccurs0withheaderline时用,这是参照一个内表定义另一内表,如果要带表头,一定要加withheaderline。

你这样问不是办法,最好不懂时直接接F1,查到SAP的帮助即可.check是检查后面的逻缉是否满足,不满足则在上例是跳出form,不的执行下面的语句。

说实在,初略的看了一下上面的程序,写得太烂了,竟然将usr01或usr03透明表中的字段按条件取到一个表工作区,竟然不加single,象这种不加single的select按理说应该是调不过的,必须在后面再对应一个endselect,而这种select加endselect用每次去读一次透明表,访问数据库的次数太多了,换个好一点程序自己研究吧。

SAPABAPPAcertification培训笔记

P(4) 

长度4个字节

Xstring(10) 

长度为10个字节,可以容纳20个数字

大结构体与小结构体的兼容

Move大to小 

大的覆盖小的 

大结构体的剩余部分保持不变

Move小to大 

匹配的部分被小的覆盖,其余的字段被初始化

P类型与F类型的优缺点

P:

计算精确,适合商业结算,但范围短

F:

储存范围大,计算不精确

P与F类型的运算方式

FIEEE用二进制数进行运算

P采用半字节储存一个数字的方式进行运算

字段结构体兼容问题

1. 

字段兼容:

类型和长度相同

2. 

结构体:

字段按顺序兼容,并且字段数相同

3. 

内表兼容:

行类型相同,KEY兼容,表类型相同

如果字符串move到一个比字符串小的结构体,

[][][][]---à

[][]

[][]

一个字段move到一个内表中

Internaltable内表.

静态数据对象包括:

简单数据类型(除了string和xstring类型),结构体(不包含string和xstring类型)

动态数据对象:

string,xstring,包含string或xstring的结构体,内表

一个结构体是否可以包含STRING或xstring, 

如果可以结构体可以拓展吗?

定义一个只有一个字段的内表字段长度是c(18),

定义一个结构体结构体里包含三个字段,类型随意, 

第二个类型,是另一个结构体

定义一个内表内表的行类型是第一个结构体.

再用第二个结构体定义一个内表,利用这个内表作为行类型,做一个内表

内表的三个基本属性

linetype行类型

keydefinition键类型

tablekind表类型

1) 

在standardtable中使用tablekey的查找方式为tablescan全表扫描

2) 

在sortedtable中使用tablekey在遵循;

left-aligned从左至右匹配,nogaps没有间隔,使用”=”填充字段时,使用二分查找法,其它情况下使用tablescan查找

3) 

对hash表访问,只能通过key访问单条记录,访问的速度不依赖于表中的数据量,而在其余两种表中,查询的时间与表中数据量成正比

其它情况是否代表,只是顺序不符合left-aligned.哈希表可以通过部分的key进行访问吗?

定义内表

定义一个局部内表类型,通过该类型定义内表变量

直接定义字段直接定义内表变量(隐藏了一个内表类型)

通过全局内表类型定义内表变量

标准的定义内表语句

TypesorDATAname

TYPEtable_kind

OFline_type

WITHkey_def

[INITIALSIZEn.]

Tablekindandkey.表类型和表键

注意:

在定义standard类型的内表时,如果使用WITHDEFAULTKEY.系统会自动将内表中的字符类型字段(c,n,d,t,x,string,xstring)组合成tablekey.

内表的key

standard标准表:

key不唯一.

sorted排序表:

可以指定KEY是否唯一

Hash哈希表:

KEY必须是唯一

在内表中使用不是结构体类型的行类型

当内表的行类型只有一列的时候,需要使用pseudo-compnent伪列,

用途:

设置一个按钮工具栏,用只含有一列的内表.

对内表的操作

move对内表的拷贝

clear将数据清空

free释放内存

4. 

compare表之间的操作,比较

5. 

sort排序表

6. 

arrayfetch

递归比较

先对内表之间的行数进行比较

如果有必有的话,还需要对行的组件进行比较

内表之间的比较

用行数比较,有必要的话可以用内容比较

定义两个内表 

两个内表不兼容一个有3个字段一个有5个

对两个内表进行比较.

定义两个内表,结构一样,变量不一样

全做成数字型字段 

第一个 

添加小数字

第二个内表添加大数字

排序可以指定升序降序.

对内表具体操作

Insert 

插入

Read 

读取

Change修改

Delete删除

Insertsummatedcollect.插入累计

对内表中的数据行进行限制条件操作

对数据的访问

一、单条数据访问

通过tablekey访问

通过lineindex访问(对于lineindex类型内表)

通过condition条件访问

二、多条数据访问

通过condition条件访问

通过indexinterval通过行区间访问

指定访问数据的传输方式

使用结构体workarea进行copy对内表数据进行操作

定义fieldsymblo指针指向访问数据,(可以直接访问数据)

通过将内表插入内表的操作

重要:

不能通过lineindex对hash表进行访问,在排序表中插入数据.除非插入的位置正好是排序表中规定的位置,否则会出现运行期异常(强烈不推荐使用insert往sortedb表中插入数据)

Fieldsymbol指针

作用:

直接对内表进行操作,而不用再重新定义结构体对目标内表数据进行拷贝,增大了效率.

定义指针语法:

Data:

var_aTYPEIVALUE4.

FIELD-SYMBOLS:

<

fs>

TYPEi.

ASSIGNvar_aTO<

.

<

=77.

定义的指针名,必须加”<

>

Insert插入操作

一、 

单条数据的插入操作

标准表:

可以使用index(推荐)和tablekey方式插入

排序表:

可以通过tablekey方式插入,但也可以用index插入(强烈不推荐,很有可能出现运行错误)

Hash表:

只能够用tablekey方式插入

二、 

多条记录的插入

源内表为indextable:

则可以指定源内表的数据范围,并插入到目标内表中

目标内表为indextable:

则可以可以指定目标内表被插入数据的具体index位置.

具体的语句插入语法:

InsertwaINTOTABLEitab. 

单条插入不指定位置

InsertwaINTOitabINDEXn. 

单条插入指定插入位置

INSERTLINESOFitab1

[fromn1ton2]

INTOTABLEitab2.

INTOitab2[INDEXn]

读取内表的一条将数据读到结构体中

如果系统独到行 

sy-subrc=0.然后读取到结构体中,

Sy-tfill存放总行数

Sy-tleng行的长度

Transporting

指定特定列传输字段 

 

传送部分字段

TRANSPORTINGNOFields不传值,作用,看内表中有没有这条数据

Camparing

有一个结构体和内表

C1C2C3

Lh001917

Lh001818

通过comparing后的值,可以判断读取的值是否符合要求.

现在结构体中需要比较的字段赋值,

先判断相应字段是否相等

回去做个练习

比较成功sy-subrc=0

Zmycompare_2009

用一个结构作为查询条件,

到内表查询符合条件的数据

Withkey可以用tablekey或普通字段作为条件

使用fieldsymbol

通过一个内表 

定义一个结构体作为指针

Readtableitab[indexn/key]assigning<

Write:

/<

-field_1.

直接修改<

的值会怎么样?

Change修改内表

Transporting 

的传输方向

通过fieldsymbol

直接修改内表

不能直接指针对sorted和hash表进行操作

Delete

Deletetableitabkey

Key:

fromwa()

Withtablekeyk1=f1….

不能用sort对排序表进行排序

对sorted表进行insertmodify,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1