1、ABAPl 了解ABAPl ABAP语法概述l ABAP语言的数据类型l ABAP的语法格式l 结构类型和结构体l 内表l 数据库操作ABAPv ABAP(Advanced business application program),是一种高级企业应用编程语言,它支持封装性和继承性,封装性是面向对象的基础,而继承性是建立在封装性基础上的重要特性。它适合生成报表,支持对数据库的操作,如:Sqlserver,Oracle,DB2等主流数据库系统。语法概述语法概述ABAP基本语法特点基本语法特点v由各自独立的语句构成。v 每个语句的第一个单词必须是ABAP关键字。v单词之间至少要用一个空格分隔。v每
2、个语句结束必须要用句号。v一个语句可以跨多行,只要不遇到句号,就认为是一个延续 的语句。v可以把多个语句放在一行。ABAP基本语法特点(持续)v ABAP不区分大小写,关键字和用户操作数都一样,为了便于阅读,一般把关键字大写,而操作数小写。v如果连续多行的第一个关键字相同,可以使用链语句方式减少输入data:id type I.data:name type c.可写为:data:id type I,name type c.注释:v注释行由第一列的星号(*)开头,并且必须写在第一 列,前面不能有空格。v在行末的注释用双引号(”)作为前导。data:id type i.“定义一个对象num数据类型
3、为IABAP的命名规则v使用至少1个但不超过8个字符。v不要使用下列字符:句点(.);逗号(,);空格();括号();单引号();双引号(“);等号(=);星号(*);百分号(%);ABAP数据类型(八种基本数据类型)vD:日期类型,格式为YYYYMMDD,长度为8vT:时间类型,格式为HHMMSS,长度为6vI :整数类型,默认长度为4,初始值为0vF:浮点类型,默认长度为8,初始值为0,常用于计算vC:字符串类型,定义变量时指定字符个数vN:数字字符串类型,定义变量时指定数值字符个数vX:字节序列类型,定义变量时指定字节数vP(压缩号):允许的长度为1 到16 个字节,系统 会指定默认值8
4、 个字节(也就是15 位数字)和0 个小数位常用:大小,长度,重量,货币等单位的场合.v定义方法:f1 type I.f2 type p decimals num.f3 type f.如:DATA number(10)type p value 9.876543210 decimals 9.输出:9.876543210如果decimals 8输出:9.87654321ABAP数据类型ABAP运算v数值运算(在ABAP中数学表达式可以任意多层嵌套)算术运算 二元操作符包括:+:加法:减法*:乘法/:除法*:乘方DIV:整除忽略余数MOD:取模 需要注意,圆括号和操作符都是关键字,需要跟操作数之间
5、至少用一个空格分开。(1+2)*3 应该写成(1+2)*3注:ABAP中不能使用”&”或”+”做连接(详参见computer语句的关键字文档数学函数时间日期运算ABAP运算v逻辑表达式通用逻辑运算符 EQ(=)NE()LT()LE()GE(=)IS操作符vIS INITIAL 检查字段是否为初始值vIS ASSIGNED 检查字段是否被分配BETWEEN操作符组合逻辑表达式 AND 与 OR 或 NOT 非ABAP程序的关健字 关健字是语句的第一个词,它决定整个语句的意义,有四种不同类型的关健字1.说明性关健字TYPES,DATA,TABLES,这些关健字说明定义数据类型或者说明程序可以访问的
6、数据对象2.事件关健字AT SELECTION SCREEN,START-OF-SELECTIONEnd-of-selection 这些关健字在ABAP中定义处理块,处理块是当特定事件发生时进行处理的语句组ABAP程序的关健字3.控制关健字IF,WHILE,CASE4.操作关健字WRITE,MOVE,ADD用于处理数据v在声明语句中定义对象的数据类型有两种直接的:type 可直接将数据类型分配给已声明的数据对象DATA number type I.间接的:like 将另一个数据对象的数据类型分配给当前声明的对象,间接引用DATA num like number.语法格式语法格式vConstan
7、ts语句:用于创建常量vTables语句:用于创建表工作区vTypes语句:1.用于创建用户自定义的数据类型 2.结构化数据类型 3.一个内表形式的数据类型vDATA语句:1.用于创建一个简单类型的变量 2.定义一个结构化的数据对象 3.定义内表语法格式语法格式语法格式语法格式定义数据对象DATAname TYPE type_name 例:DATA number TYPE I.DATA num TYPE I value 18.TYPES:address TYPE C.注:TYPES语句用来创建用户定义的基本数据类型和结构化的数据类型,通过TYPES定义的类型不能直接使用,需要通过DATA进行定
8、义其对应的变量后才可使用如:DATA:address1 TYPE address语法格式语法格式赋值可以使用MOVE 关键字来对数据对象赋值,下面两个语句具有相同的功效。DATA:var1 type I value 18,var2 type I.MOVE var1 TO var2.var2=var1.把var1的值赋给var2,如果var1 和var2 的数据类型不同,就存在类型冲突的可能 性,这时候如果存在转换规则,则会进行自动类型转换 关于类型冲突和自动转换,可以查MOVE 的帮助。CLEAR 语句根据类型清除数据对象,恢复成默认值。打印输出格式(WRITE)vWRITE First li
9、ne.vWRITE Still first line.vWRITE/Second line.vWRITE/13 Third line.v这在屏幕上 生成如下输 出:vFirst Line.Still first line.Second line.Third line.分支结构(IF,CASE)使用IF的条件分支 IF .ELSEIF .ELSEIF .ELSE.ENDIF.使用CASE的条件分支基本语法:CASE.WHEN.WHEN.WHEN.WHEN.WHEN OTHERS.ENDCASE.循环结构(DO,WHILE)使用DO的无条件循环DO TIMES VARYING FROM NEXT.
10、ENDDO.vTIMES 循环次数,v可以是数字或变量。如果是0或负数,系统不执行该循环vVARYING选项在每次循环中给变量重新赋值.第一次循环中,将分配给,第二次循环中,将分配给,以此类推。可以在一个DO语句中使用多个VARYING选项。v使用 DO 语句时要避免死循环。如果不使用 TIMES 选项,则在语句块中至少应包含一个 EXIT、STOP 或 REJECT 语句,以便系统能够退出循环。v使用WHILE的条件循环语法:WHILE VARY FROM NEXT.ENDWHILE.只要只要是真是真,或系统没有发现或系统没有发现EXIT、STOP或或REJECT语句语句,系统将继续执行由系
11、统将继续执行由WHILE语句引导、语句引导、ENDWHILE结束的语句结束的语句块块,VARY选项与选项与DO循环的循环的VARYING选项选项工作方式一样工作方式一样循环终止(CONTINUE,CHECK,EXIT)无条件终止循环:CONTINUE有 条 件 终 止 循 环:C H E C K 完全终止循环:EXIT事件关健字 这些关健字在ABAP中定义处理块,处理块是当特定事件发生时进行处理的语句组vAT SELECTION SCREEN:其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。用户在选择屏幕中执行某些功能后被触发。多用于权限判断,给出警告信息vSTART-OF-SE
12、LECTION:报表程序必须执行的事件,在进入第二屏幕之前触发。选择开始事件,如果报表中含有选择屏幕,则在选择屏幕的处理结束后触发,是报表程序的默认事件块;vEnd-of-selection:第二屏幕显示完毕,结束处理。选择结束事件,如果程序中使用逻辑数据库,则在所有逻辑数据库处理结束后触发,一般在该事件之中输出列表。.结构类型和结构体结构类型由多个数据元素作为组件构成参照结构类型生成的数据对象称为结构体定义方式 TYPES|DATA:BEGIN OF structure,k1 TYPE type|LIKE dobj,k2 TYPE type|LIKE dobj,kn TYPE type|LI
13、KE dobj,END OF structure.组件通过取组件运算符”-”进行访问 structure-k1Demo: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.内 表v内表是可变长度
14、的数据对象,在运行时内表可保存多个相同结构的数据,行数是动态的,系统可实时增加内表的大小。内存中,数据是一行一行的存储的,每行 都具有相同的结构v使用内表是一个大量结构化数据的简单办法,主要应用包括:1.保存数据库的数据进行进一步的处理2.为屏幕和打印输出格式化的数据v内表的属性对数据表的访问:分为索引访问,键访问表的类型(三种):标准表,排序表,哈希表v内表的定义TYPES|DATA Itab TYPE|LIKE tabkind OF line type|line obj WITH unique|non-unique key INITIAL SIZE n.Tabkind 内表种类Linety
15、pe 行类型 key 表关键字n 初始内存大小内 表 内表类型(一)标准表 STANDARD TABLE 具有逻辑索引 寻址操作通过关键字或者索引排序表 SORTED TABLE 具有逻辑索引 按表关键字升序后存储寻址操作通过关键字或者索引哈希表 HASHED TABLE 没有逻辑索引 寻址操作只通过关键字DATA:BEGIN OF company,name(20)TYPE C,street(20)TYPE C,city(20)TYPE C,END OF company.DATA itab_company LIKE HASHED TABLE OF company WITH UNIQUE KEY
16、 name.创建一个内表内表操作v可以使用Append、Insert、Read、Modify、Delete 对内表的一行或多行执行操作。vAppend:往内表的最后追加一条记录,只用于标准表vInsert:向内表插入一条记录,在标准表中跟append一样,在排序表里就插入到键指定的位置,在哈希表则根据哈希算法插入。vRead:把表的指定行拷贝到结构中vModify:使用结构的内容重写表的指定行vDelete:删除表的指定行内表操作(一)v操作内表行插入行 INSERT语句 插入单行 INSERT line INTO itab INDEX idx.插入多行 INSERT lines OF ita
17、b1 FROM n1 TO n2 INTO TABLE itab2 INDEX idx.内表itab1 的从n1到n2的多行数据插入到itab2 中。内表操作(二)附加行 APPEND语句 附加单行 APPEND line TO itab.附加多行 APPEND LINES OF itab1FROM n1 TO n2 TO itab.内表操作读取行 READ语句 利用索引读取 READ TABLE itab INTO wa INDEX idx.利用关键字读取 READ TABLE itab FROM key INTO wa.内表操作(三)修改行 MODIFY语句 根据索引修改 MODIFY i
18、tab 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 行)
19、通过关键字删除 DELETE TABLE itab FROM wa.把想要删除的键字段值拷贝到工作区wa 中删除多行 DELETE itab FROM n1 TO n2 WHERE循环处理结果集合使用 LOOP语句Loop语句一条条的读出数据行,写入INTO指定的结构中,结构内容可用于输出或写回内表.LOOP AT itab INTO wa FROM n1 TO n2 WHERE.ENDLOOP内表操作(五)数据库操作数据库操作 可以使用OPEN SQL 或NATIVE SQL 语句来从数据库读取数据。Open sql 与Native sql 的区别:1.open sql 只能使用DML,sl
20、elect,insert,update,delete,modifynotive sql 可以使用DML和DDL和DCL2.Open sql 是操作SAP数据库的语言,notive sql 是SAP使用的数据库本身的SQL语言Open SQL操作(一)只包括数据操纵(DML)SELECT INSERT UPDATE MODIFY DELETE不包括数据定义(DDL)和数据控制(DCL)Open SQL操作(二)v提取数据 SELECT 语句选择单行数据 SELECT SINGLE INTO FROM 选择多行数据:循环选择 SELECT DISTINCT ENDSELECT.选择多行数据:选择至
21、内表 SELECT INTO TABLE itab.Open SQL操作(三)插入数据 INSERT语句插入单行数据 INSERT INTO dbtab VALUES wa.插入多行数据 INSERT dbtab FROM TABLE itab.Open SQL操作(四)更新数据 UPDATE语句更新单行数据 UPDATE dbtab SET f1=g1 fi=gi WHERE.*fix_key 全部表关键字段的值或UPDATE dbtab FROM wa.更新多行数据 UPDATE dbtab SET f1=g1 fi=gi WHERE.或UPDATE dbtab FROM TABLE it
22、ab.Open SQL操作(五)v添加或更新数据 MODIFY语句添加或更新单行数据 MODIFY dbtab FROM wa.添加或更新多行数据 MODIFY dbtab FROM TABLE itab.Native SQL操作v语法:EXEC SQL PERFORMING.;ENDEXEC.示例:Native sqlvDATA:BEGIN OF wa,v connid TYPE spfli-connid,v cityfrom TYPE spfli-cityfrom,v cityto TYPE spfli-cityto,v END OF wa.vDATA c1 TYPE spfli-carrid VALUE LH.vEXEC SQL PERFORMING loop_output.v SELECT connid,cityfrom,citytov INTO :wav FROM spfliv WHERE carrid=:c1vENDEXEC.vFORM loop_output.v WRITE:/wa-connid,wa-cityfrom,wa-cityto.vENDFORM.谢 谢