初学ABAP的一点教程3Word文件下载.docx
《初学ABAP的一点教程3Word文件下载.docx》由会员分享,可在线阅读,更多相关《初学ABAP的一点教程3Word文件下载.docx(11页珍藏版)》请在冰点文库上搜索。
COMMITWORK.
相反的,如果反悔要复原,可使用ROLLBACKWORK,可复原在上个COMMITWORK指令之后的资料,如:
ROLLBACKWORK.
使用NATIVESQL指令
语法格式:
EXECSQL[PERFORMING<
form>
].
<
statements>
ENDEXEC.
举例一.
EXECSQL.
CREATETABLEAVERI_CLNT(
CLIENT
CHAR(3)NOTNULL,
ARG1
ARG2
FUNCTIONCHAR(10)NOTNULL,
PRIMARYKEY(CLIENT,ARG1,ARG2)
)
爱ERP网
举例二.
DATA:
F1(3),F2(3),F3(3).
F3='
1'
SELECTCLIENT,ARG1INTO:
F1,:
F2FROMAVERI_CLNT
WHEREARG2=:
F3
ENDEXEC
PERFORMING<
formname>
的使用:
如果NATIVESQL的SELECT命令执行结果是抓到多笔记录,我们想要逐笔记录处理时,就用PERFORMING参数,这个FORM能被逐次调用。
如果想中止调用,就用EXIT
FORMSQL结束调用。
例如:
010'
EXECSQLPERFORMINGWRITE_AVERI_CLNT.
FORMWRITE_AVERI_CLNT.
WRITE:
/F1,F2.
ENDFORM.
BEGINOFWA,
NAME(8),
AGETYPEI,
END
OFWA.
DATAF1TYPEI.
FI=20.
EXECSQLPERFORMINGOUTPUT.
SELECTNAME,AGEINTO:
WAFROMNAME_TABLE
WHEREAGE&
gt;
=:
F1.
ENDEXEC..
FORMOUTPUT.
WRITE:
/WA-NAME,WA-AGE.
ENDFORM.
注意:
a.NATIVESQL把TABLE中的MANDT(client)栏位当作一般栏位使用,所以在抓取资料时必须指定特定的Client;
b.NATIVESQL中的SELECT语句没有CHECK权限的功能;
c.在登入SAPR/3系统时,我们已经自动与Database连接,所以在执行NATIVESQL时并不需要CONNECT语句;
d.一条NATIVESQL语句可以以分号;
结束,一般情况下是以句号.结束.
e.某些数据库系统对TABLE名字和FIELD名字有大小写区别,要正确书写.
f.在NATIVESQL中,双引号"
不表示注释.
结果语句
条件述叙
1.IF述叙
IF<
Condition1>
Statement1>
ELSEIF<
Condition2>
Statement2>
Condition3>
Stetement3>
…..
ELSE.
elseStatement>
ENDIF.
(1).在每个判断关键字之后要加上.
(2).在巢状循环之中无法使用ELSE关键字,ELSE关键字属IF关键字
IF3&
8.
WRITE/'
3islessthan8'
2.CASE关键字
CASE<
变量f>
WHEN<
Value1>
Statement1>
Value2>
Statement2>
….
WHENOTHERS.
othersStatement>
ENDCASE.
S='
A'
.
CASES.
WHEN'
X'
StringisX'
StringisnotX'
循环关键字
1.计次循环
DO[nTIMES][VARYING<
f>
FROM<
start>
TO<
end>
loopblock>
ENDDO.
DO2TIMES.
执行结果:
X
DOVARYINGIFROM 1TO10.
S=S+I.
/,'
1+2+3+…+10='
S
1+2+3+…+10=55
2.条件循环
WHILE<
Condition>
StatementBlock>
ENDWHILE
I=1.
S=0.
WHILEI<
=10.
S=S+I.
I=I+1.
ENDWHILE.
/'
1+2+3+…+10='
S.
执行结果为:
循环控制关键字
1.CONTINUE
跳至循环的下一次
Example:
DO3TIMES.
IFSY-INDEX=2.
CONTINUE.
WRITE/SY-INDEX.
1
3
2.CHECK&
lt;
CHECK之后条件成立才继续往下执行循环
DO5TIMES.
CHECKSY-INDEXBETWEEN2AND4.
2
4
3.EXIT
跳离循环关键字
DO10TIMES.
IFSY-INDEX=4.
EXIT.
ENDIF
无穷循环
DO.
无穷循环必须配合EXIT关键字来执行
搜索字符串
要搜索特定模式的字符串,请使用SEARCH语句,用法如下:
语法
SEARCH<
FOR<
str>
options>
该语句在字段<
中搜索<
中的字符串。
如果成功,则将SY-SUBRC的返回代码值设置为0并将SY-FDPOS设置为字段<
中该字符串的偏移量。
否则将
SY-SUBRC设置为4。
搜索串<
可为下列格之一:
<
目的
pattern>
搜索<
(任何字符顺序)。
忽略尾部空格。
.<
.搜索<
,但是不忽略尾部空格。
*<
搜索以<
结尾的词。
*搜索以<
开始的词。
单词之间用空格、逗号、句号、分号、冒号、问号、叹号、括号、斜杠、加号和等号等分隔。
DATASTRING(30)VALUE'
Thisisalittlesentence.'
Searched'
'
SY-SUBRC'
SY-FDPOS'
ULINE/1(26).
SEARCHSTRINGFOR'
SY-SUBRCUNDER'
SY-FDPOSUNDER'
itt
'
.e.'
*e'
*e'
s*'
s*'
该过程的输出如下:
SEARCHEDSY-SUBRCSY-FDPOS
X
4
0
0
11
.e.
15
*e
10
s*
17
搜索字符字段<
的各种选项(<
)如下
ABBREVIATED
在字段<
中搜索包含<
中指定字符串的单词,其中字符可能被其它字符隔开。
单词和字符串的第一个字母必须相同。
STARTINGAT<
n1>
中搜索从<
开始的<
。
结果SY-FDPOS参照相对于<
的偏移量而不是字段的开始。
ENDINGAT<
n2>
直到位置<
ANDMARK
如果找到搜索串,则将搜索串中的所有字符(和使用ABBREVIATED时的所有字符)转换为大写形式。
STRING(30)VALUE'
Thisisafastfirstexample.'
POSTYPEI,
OFFTYPEI.
WRITE/STRING.
ft'
ABBREVIATED.
SY-FDPOS:
'
SY-FDPOS.
POS=SY-FDPOS+2.
ABBREVIATEDSTARTINGATPOSANDMARK.
OFF=POS+SY-FDPOS-1.
Off:
OFF.
Thisisafastfirstexample.
ThisisafastFIRSTexample.
请注意,在找到单词'
fast'
之后,为了查找包含'
ft'
的第二个单词,必须在偏移量SY-FDPOS上加2,然后从位置POS开始查找。
否则,会再次找到单词
fast'
要获得'
first'
相对于字段STRING开始的偏移量,从POS和SY-FDPOS计算。
获得字符串长度
要决定字符串到最后一个字符而不是SPACE的长度,请使用内部函数STRLEN,用法如下:
[COMPUTE]<
n>
=STRLEN(<
).
STRLEN将操作数<
作为字符数据类型处理,而不考虑其实际类型。
不进行转换。
关键字COMPUTE可选。
有关内部函数的详细信息,参见使用数学函数(页49)。
INTTYPEI,
WORD1(20)VALUE'
12345'
WORD2(20).
WORD3(20)VALUE'
INT=STRLEN(WORD1).WRITE
INT.
INT=STRLEN(WORD2).WRITE/INT.
INT=STRLEN(WORD3).WRITE/INT.
结果分别是5,0和4。
StandardReport
一个典型的报表程序是由许多的程序区块(CodeBlock)所组成,在区块间最好能加上一些说明以利程序可读性,一个典型的报表程序格式如下:
*PROGRAMSOURCEHEADER:
说明程序名称及目的
*ProgramName:
*Description:
*Date/Author:
*TableUpdate:
*SpecialLogic:
*Include:
*MODIFICATIONLOG:
程序修改更新记录
*ChangeDateProgrammer
Request
Description
*
NEWPROGRAM
*REPORTNAME:
声明程序名称及报表格式,
REPORTZ_____
NOSTANDARDPAGEHEADING
MESSAGE-ID__
"
所使用的MESSAGE
LINE-COUNT___
每页报表列数
LINE-SIZE___."
每页报表宽度
*TABLEDESCRIPTION:
声明程序会使用的TABLE
TABLES:
*DATA:
声明程序所使用的变量及自定型态
TYPES:
*SELECTIONSCREEN/OPTION/PARAMETER:
屏幕输入报表筛选条件
SELECTION-SCREENBEGINOFBLOCK____
SELECT-OPTIONS:
SELECTION-SCREENENDOFBLOCK___
*INITIALIZATION:
启动程序开始执行,如SELECT-OPTION及PARAMETER
INITIALIZATION.
INCLUDE____.
*ATSTARTSELECTION: