ABAP学习笔记
一、 ABAP语法简介:
ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。主要的语法有:
数据类型、控制流程、文本摘要、输出格式、程序调试
1、 数据类型:
(八种基本数据类型)
D :日期类型,格式为YYYYMMDD,长度为8
T :时间类型,格式为HHMMSS,长度为6
I :整数类型,默认长度为4,初始值为0
F :浮点类型,默认长度为8,初始值为0,常用于计算
C :字符串类型,定义变量时指定字符个数
N :数字字符串类型,定义变量时指定数值字符个数
X :字节序列类型,定义变量时指定字节数
P(压缩号) :允许的长度为1 到16 个字节,系统 会指定默认值8 个字节(也就是15 位数字)和0 个小数位常用:大小,长度,重量,货币等单位的场合.
2、 输出格式:
WRITE 'First line.'.
WRITE 'Still first line.'
WRITE / 'Second line.'
WRITE /13 'Third line’.
3、 控制流程:
使用IF的条件分支
IF <条件表达式1>.
< statement block >
ELSEIF <条件表达式2>.
< statement block >
ELSEIF <条件表达式3>.
< statement block >
.....
ELSE.
< statement block >
ENDIF.
使用CASE的条件分支
CASE <f>.
WHEN <F1>.
<statement block>
WHEN <F2>.
<statement block>
WHEN <F3>.
<statement block>
WHEN ...
......
WHEN OTHERS.
<statement block>
ENDCASE.
二、 ABAP的语法特点:
1、由各自独立的语句构成。
2、每个语句的第一个单词必须是ABAP关键字。
3、单词之间至少要用一个空格分隔。
4、每个语句结束必须要用句号。
5、一个语句可以跨多行,只要不遇到句号,就认为是一个延续 的语句。
6、可以把多个语句放在一行。
7、ABAP不区分大小写,关键字和用户操作数都一样,为了便于阅读,一般把关键字大写,而操作数小写。
8、如果连续多行的第一个关键字相同,可以使用链语句方式减少输入
data: id type I.
data: name type c.
可写为:
data: id type I ,
name type c.
注释:
注释行由第一列的星号(*)开头,并且必须写在第一 列,前面不能有空格。
在行末的注释用双引号(”)作为前导。
data: id type i. “ 定义一个对象num数据类型为I
三、语法格式
vConstants语句:用于创建常量
vTables语句:用于创建表工作区
vTypes语句:
1.用于创建用户自定义的数据类型 2.结构化数据类型
例子1:TYPES: BEGIN OF itab_out,
matnr LIKE mseg-matnr, "物料编码
maktx LIKE makt-maktx, "物料描述
matkl LIKE mara-matkl, "物料组
wgbez LIKE t023t-wgbez, "物料组描述
erfmg_r5 LIKE mseg-erfmg, "当日交货量
erfmg_r6 LIKE mseg-erfmg, "累计交货量
erfmg_r7 LIKE mseg-erfmg, "成品库移库数量
erfmg_r8 LIKE mseg-erfmg, "当日冲产退货量
erfmg_r9 LIKE mseg-erfmg, "累计冲产退货量
erfmg_r10 LIKE mseg-erfmg, "当日产量
erfmg_r11 LIKE mseg-erfmg, "累计产量
erfmg LIKE mseg-erfmg, "条目单位的数量
erfmg_r8_temp LIKE mseg-erfmg, "中间变量计算R10用的
erfmg_r9_temp LIKE mseg-erfmg, "中间变量计算R11用的
END OF itab_out.
例子2:TYPES: BEGIN OF address,
name TYPE string,
street(30) TYPE C,
city TYPE String,
END OF address.
DATA my_ add TYPE address.
my_ add-name = ' li li' .
my_ add-street = ' zhangjiang' .
my_ add-city = ' shanghai' .
write: my_ add-name , my_ add-street , my_ add-city.
3.一个内表形式的数据类型
DATA语句:
1.用于创建一个简单类型的变量
2.定义一个结构化的数据对象
3.定义内表
例子:
*定义用到的内表
DATA: gt_out TYPE TABLE OF itab_out WITH HEADER LINE,
gt_t023t TYPE TABLE OF t023t WITH HEADER LINE,
gt_makt TYPE TABLE OF makt WITH HEADER LINE,
gt_mkpf TYPE TABLE OF mkpf WITH HEADER LINE,
gt_mseg TYPE TABLE OF itab_mseg WITH HEADER LINE,
gt_mara TYPE TABLE OF mara WITH HEADER LINE.
四、 内表
内表是可变长度的数据对象,在运行时内表可保存多个相同结构的数据,行数是动态的,系统可实时增加内表的大小。内存中,数据是一行一行的存储的,每行 都具有相同的结构
使用内表是一个大量结构化数据的简单办法,主要应用包括:
1.保存数据库的数据进行进一步的处理
2.为屏幕和打印输出格式化的数据
创建内表:
定义表结构
DATA: BEGIN OF company,
name(20) TYPE C,
street(20) TYPE C,
city(20) TYPE C,
END OF company.
创建一个结构为company的内表
DATA itab_company LIKE HASHED TABLE OF company
WITH UNIQUE KEY name.
内表操作
可以使用Append、Insert、Read、Modify、Delete 对内表的一行或多行执行操作。
Append:往内表的最后追加一条记录,只用于标准表
Insert:向内表插入一条记录,在标准表中跟append一样,在排序表里就插入到键指定的位置,在哈希表则根据哈希算法插入。
Read:把表的指定行拷贝到结构中
Modify:使用结构的内容重写表的指定行
Delete:删除表的指定行
操作内表行
插入行 INSERT语句
插入单行
INSERT line INTO itab INDEX idx .
插入多行
INSERT lines OF itab1 [FROM n1] [TO n2]
INTO [TABLE] itab2 [INDEX idx].
内表itab1 的从n1到n2的多行数据插入到itab2 中。
*附加行 APPEND语句
附加单行
APPEND line TO itab .
附加多行
APPEND LINES OF itab1[FROM n1] [TO n2] TO itab .
读取行 READ语句
利用索引读取
READ TABLE itab INTO wa INDEX idx .
利用关键字读取
READ TABLE itab FROM key INTO wa .
修改行 MODIFY语句
根据索引修改
MODIFY itab [FROM wa] [index idx]
[TRANSPORTING f1 f2 …] .
来修改内表的第n 行
根据关键字修改
MODIFY TABLE itab FROM wa
[TRANSPORTING f1 f2 …] .
允许你修改内表itab 的一行
修改多行
MODIFY itab FROM wa TRANSPORTING f1 f2 …
WHERE cond .
在Transporting 后指定所有需要修改的字段,要把给这些字段 的值写在wa 中,使用WHERE 子句指定行的条件。
删除行 DELETE语句
通过索引删除
DELETE itab INDEX idx .(删除内表中的第n 行)
通过关键字删除
DELETE TABLE itab FROM wa .
把想要删除的键字段值拷贝到工作区wa 中
删除多行
DELETE itab [FROM n1] [TO n2] [WHERE<condition>]
循环处理结果集合使用 LOOP语句
Loop语句一条条的读出数据行,写入INTO指定的结构中,结构内容可用于输出或写回内表.
LOOP AT itab [INTO wa] [FROM n1] [TO n2]
[WHERE<condition>].
<statement block>
ENDLOOP
五、OPEN SQL 或NATIVE SQL
Open sql 与Native sql 的区别:
1. open sql 只能使用DML, slelect,insert,update,delete,modify
notive sql 可以使用DML和DDL和DCL
2.Open sql 是操作SAP数据库的语言,
notive sql 是SAP使用的数据库本身的SQL语言
提取数据 SELECT 语句
选择单行数据
SELECT SINGLE <结果集> INTO <目标表> FROM <数据库>…
选择多行数据:循环选择
SELECT [DISTINCT] <result> …
<statement block>
ENDSELECT.
选择多行数据:选择至内表
SELECT … INTO TABLE itab.
插入数据 INSERT语句
插入单行数据
INSERT INTO dbtab VALUES wa .
插入多行数据
INSERT dbtab FROM TABLE itab .
更新数据 UPDATE语句
更新单行数据
UPDATE dbtab SET f1=g1 … fi=gi WHERE <fix_key>.
*fix_key 全部表关键字段的值
或UPDATE dbtab FROM wa .
更新多行数据
UPDATE dbtab SET f1=g1 … fi=gi [WHERE <条件>].
或UPDATE dbtab FROM TABLE itab .
添加或更新数据 MODIFY语句
添加或更新单行数据
MODIFY dbtab FROM wa .
添加或更新多行数据
MODIFY dbtab FROM TABLE itab .