SAPABAP语法整理Word格式文档下载.docx
- 文档编号:22910083
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:38
- 大小:41.25KB
SAPABAP语法整理Word格式文档下载.docx
《SAPABAP语法整理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SAPABAP语法整理Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
Select*fromzflight.
Check:
zflight-airln=‘LF’andzflight-fligh=‘BW222’.
Endselect.
推荐
Select*fromzflightwhereairln=‘LF’andfligh=‘222’.
2、使用聚合函数
Maxnu=0.
Select*fromzflightwhereairln=‘LF’andtry=‘IN’.
Checkzflight-fligh>
maxnu.
Maxnu=zflight-fligh.
Selectmax(fligh)fromzflightintomaxnuwhereairln=‘LF’andtry=‘IN’.
3、使用视图代替基本表查询
Select*fromzcntrywheretrylike‘IN%’.[Page]
Selectsingle*fromzflightwheretry=zcntry-cntryandairln=‘LF’.
Select*fromzcnflwheretrylike‘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_flighwheretry=int_cntry-cntry.Appendint_fligh.Endloop.
Select*fromzflighappendingtableint_fligh
Forallentriesinint_cntry
Wheretry=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,使用不当可能会出错
HASH表不能通过index进行操作
Headerline
Withheadline关键字定义
废弃用法
Occur+整数,10,
Occur0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAPABAP 语法 整理
![提示](https://static.bdocx.com/images/bang_tan.gif)