SAP ABAP基本语法概述_第1页
SAP ABAP基本语法概述_第2页
SAP ABAP基本语法概述_第3页
SAP ABAP基本语法概述_第4页
SAP ABAP基本语法概述_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 SAP ABAP基本语法概述目 录 TOC o 1-2 h z HYPERLINK l _Toc38914022 1ABAP基础 PAGEREF _Toc38914022 h 3 HYPERLINK l _Toc38914023 1.1创建简单的ABAP程序 PAGEREF _Toc38914023 h 3 HYPERLINK l _Toc38914024 1.2ABAP程序帮助 PAGEREF _Toc38914024 h 7 HYPERLINK l _Toc38914025 1.3ABAP语法和程序格式 PAGEREF _Toc38914025 h 8 HYPERLINK l _Toc3

2、8914026 1.4输出数据到屏幕 PAGEREF _Toc38914026 h 11 HYPERLINK l _Toc38914027 1.5赋值 PAGEREF _Toc38914027 h 13 HYPERLINK l _Toc38914028 1.6运算符及函数 PAGEREF _Toc38914028 h 17 HYPERLINK l _Toc38914029 1.7流控制 PAGEREF _Toc38914029 h 18 HYPERLINK l _Toc38914030 1.8注释结构 PAGEREF _Toc38914030 h 21 HYPERLINK l _Toc3891

3、4031 2内表 PAGEREF _Toc38914031 h 21 HYPERLINK l _Toc38914032 2.1内表索引 PAGEREF _Toc38914032 h 21 HYPERLINK l _Toc38914033 2.2访问内表 PAGEREF _Toc38914033 h 21 HYPERLINK l _Toc38914034 2.3内表的声明 PAGEREF _Toc38914034 h 23 HYPERLINK l _Toc38914035 2.4内表的使用 PAGEREF _Toc38914035 h 25 HYPERLINK l _Toc38914036 3S

4、QL指令 PAGEREF _Toc38914036 h 33 HYPERLINK l _Toc38914037 3.1SELECT指令 PAGEREF _Toc38914037 h 33 HYPERLINK l _Toc38914038 3.2INSERT指令 PAGEREF _Toc38914038 h 36 HYPERLINK l _Toc38914039 3.3UPDATE指令 PAGEREF _Toc38914039 h 37 HYPERLINK l _Toc38914040 3.4MODIFY指令 PAGEREF _Toc38914040 h 37 HYPERLINK l _Toc3

5、8914041 3.5DELETE指令 PAGEREF _Toc38914041 h 37 HYPERLINK l _Toc38914042 3.6数据库指针 PAGEREF _Toc38914042 h 38 HYPERLINK l _Toc38914043 4数据库 PAGEREF _Toc38914043 h 39 HYPERLINK l _Toc38914044 4.1数据库数据的选取、更新、删除、插入 PAGEREF _Toc38914044 h 39 HYPERLINK l _Toc38914045 4.2数据库的事务 PAGEREF _Toc38914045 h 40 HYPER

6、LINK l _Toc38914046 4.3SE16检查表的内容 PAGEREF _Toc38914046 h 40 HYPERLINK l _Toc38914047 4.4SE11定义表结构 PAGEREF _Toc38914047 h 43 HYPERLINK l _Toc38914048 4.5检查数据表是否锁定 PAGEREF _Toc38914048 h 46ABAP基础创建简单的ABAP程序在上述界面中输入SE38键入回车进入ABAP编辑器界面,如图1-1所示。功能操作区编辑、查看、创建选项区ABAP程序名图1-1创建程序名称时请遵守这些命名约定:报表程序(以列表格式输出数据分析

7、):Yaxxxxxx 或 Zaxxxxxx。用应用程序区的分类字母替换 a。用任何有效字符替换 x 。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。任何其它ABAP/4 程序(培训程序或事务程序): SAPMYxxx 或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4 程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。输入程序名,点击创建,则进入以下界面,如图1-2所示。图1-2Title:程序描述或功能说明,Report时为显示的标题。Type: Execute mode: 1(Stand-along Program 如Reports)、I(Inclu

8、de Program)、 M(Module Pool)、F(Function Group)、S(Subroutine Pool)。Status: Program development status: P (SAP standard production program)、K (Customer production program)、S(System program)、T(Test program)。Application: 程序所属的application module, 如F表 Financial accountingDevelopment class: 用于同一系统中各个program

9、, 如果不属任一class(开发类), 可使用$TMP,如图1-3所示。保存输入$TMP点击保存或者点击下面的本地对象则保存到本地图1-3保存后会进入程序的编辑界面,在里面输入ABAP代码即可,代码中每一行最后要有一个语句结束符.,空格为分隔符选择如图,可进入文本编辑,如图1-4所示。代码编辑区图1-4选择界面上的文本图1-5运行结果:完成程序后,进行扩张检查(事务代码SLIN),如图1-6所示。选择标准执行要检查的程序名图1-6运行后,出现以下界面,如图1-7所示。图1-7ABAP程序帮助在程序处选需要的内容后,按F1键,如图1-8所示。样例库选所需内容查看帮助内容图1-8双击样例库,进入以

10、下界面,如图1-9所示。查看样例程序图1-9样例程序代码图1-10ABAP语法和程序格式1、语句结构2、ABAP数据元素ABAP的数据形态,如表1-1所示。类型长度范围初始值描述C11-65535ByteSpace字符串数据, 如ProgramD88Byte00000000日期数据, 格式为YYYYMMDDF88Byte0浮点数I4-231至231-10整数N11-65535Byte000数值所组成的字符串 P81-16Byte0Packed 数, 用在小数点数T66Byte000000时间数据, 格式为HHMMSSX11-65535ByteX0016进位数表1-13、变量声明变量声明包含na

11、me,type,length和structure四个部分,用于变量声明的有如下指令:data、type、like、statics、tables(同时声明多个变量的时候,data、statics和tables后面加冒号,各变量之间用逗号隔开)type语句:用来指定数据形态或声明自定义数据形态,定义数据类型,语法如下:TYPES .TYPE |LIKE Example:TYPES: BEGIN OF TY_TAB, NAME(10) TYPE C, NUMBER1 TYPE I, NUMBER2 TYPE P DECIMALS 2, END OF TY_TAB.DATA: WA_TAB TYPE

12、TY_TAB, IT_TAB TYPE TABLE OF TY_TAB.like语句:与type类似,不同的是like用在已有值的数据项,而type叙述的则是用在指定的数据形态,type对应一个已定义的type,like对应一个已定义的object,不能是结构,而是定义好的对象,语法如下:DATA LIKE Example:DATA L_TABIX LIKE SY-TABIX.data语句:用于声明变量,语法如下:DATA TYPE |LIKE VALUE DECIMALS 其中 :变量名称,最长30个字符,不可含有+ . , : ( ;等特殊字符:变量长度,还可使用关键字length来说明变

13、量的长度:数据类型: 数据对象:初始值:小数位数Example:DATA: COUNTER TYPE P VALUE 1, FLAG TYPE C VALUE IS INITIAL, 初始值为空 WEIGHT TYPE P DECIMALS 2 VALUE 1.25, 小数用单引号 CHAR(30). 没有用type或like给变量指定类型则默认类型为Cstatics语句(尽量不要使用):声明的变量为当前程序的全局变量,仅在目前的程序中使用,结束后会自动释放,语法如下:STATICS TYPE |LIKE VALUE DECIMALS Example:PROGRAM FORM_TEST.PER

14、FORM DATATEST1.PERFORM DATATEST1.PERFORM DATATEST2.PERFORM DATATEST2.FORM DATATEST1. TYPES F_WORD(5) TYPE C. DATA F_TEXT TYPE F_WORD VALUE INIT. WRITE F_TEXT. F_TEXT = 12345. WRITE F_TEXT.ENDFORM.FORM DATATEST2. TYPES F_WORD(5) TYPE C. STATICS F_TEXT TYPE F_WORD VALUE INIT. WRITE F_TEXT. F_TEXT = AB

15、CDE. WRITE F_TEXT.ENDFORM.运行结果为:INIT 12345 INIT 12345 INIT ABCDE ABCDE ABCDEtables语句:按照表的结构定义工作区,语法如下:TABLES 其中为数据库表名称Example:TABLES: BKPF.SELECT SINGLE * FROM BKPF.WRITE: BKPF-BUKRS, BKPF-BELNR, BKPF-GJAHR.4、常数声明声明常数的关键字是constants,语法如下:CONSTANTS TYPE |LIKE VALUE DECIMALS CONSTANTS: CNAME(10) VALUE

16、周庆日, BIRTH_DAY TYPE D VALUE 19890824, BEGIN OF MYADDRESS, NAME(20) TYPE C VALUE Chongqing, NUMBER TYPE I VALUE 23, POSTCODE(6) TYPE N VALUE 405407, END OF MYADDRESS.5、系统所定义数据系统中有定义一些专有名词,如:SPACE 空白字符串SY-SUBRC 系统执行传回值,0表示成功SY-UNAME 当前系统登录的登录名SY-DATUM 当前系统日期SY-UZEIT 当前系统时间SY-TCODE 目前使用的transaction cod

17、eSY-COLNO 当前列SY-LINNO 当前行更多系统数据参见数据表SYST输出数据到屏幕1、屏幕画线,语法如下:ULINE AT / /:换行符:线的起始位置:线的长度如果没有格式规范,系统则开始新的一行,并用水平线填充该行。否则,只按指定输出水平线。2、write语句是ABAP用来在屏幕上输出数据的指令,语法如下:WRITE 资料项可以输出常数或常量指定屏幕位置显示,语法如下: WRITE AT / 资料项/:换行:屏幕X坐标:显示资料的长度指定格式显示,语法如下: WRITE 资料项 显示格式参数:LEFT-JUSTIFIED 资料靠左显示CENTERED 资料中间显示RIGHT-J

18、USTIFIED 资料靠右显示UNDER 在资料项的X轴开始坐标显示NO-GAP 紧接着显示,不留空格USING EDIT MASK 使用内嵌字符显示, 如 11:20:30USING NO EDIT MASK 不使用内嵌字符NO-ZERO 数字前面0的部分不显示NO-SIGN 不显示正负号DECIMALS 显示 d 位小数字数EXPONENT F(浮点数) exponent 的值ROUND 四舍五入至小数位数下 r 位CURRENCY currency 币别显示DD/MM/YY | MM/DD/YY | DD/MM/YYYY | MM/DD/YYYY | DDMMYY | MMDDYY |

19、YYMMDD 日期显示格式产生空白列,语法如下: SKIP :空白的列数,如果没有指定,则默认为空一列显示图示,语法如下: WRITE AS SYMBOL WRITE AS ICON:R/3系统所提供的符号名:R/3系统所提供的图标名Example: INCLUDE . INCLUDE . WRITE: / Phone Symbol:, SYM_PHONE AS SYMBOL. WRITE: / Alarm Icon:, ICON_ALARM AS ICON.执行结果:要查看系统所提供有那些符号及图标, 可选择 “pattern” 下的 “Insert Statement”, 选择 “WRIT

20、E”, 接下来选择要查的群组, 如SYMBOL 或 ICON, 按下 “Display” 即可。跳至指定列坐标,语法如下: SKIP TO LINE :屏幕的Y坐标显示CHECK BOX资料,语法如下: WRITE AS CHECKBOX以字符串数据内容的第一个字符为 CHECK BOX的输出, 如果是空白, CHECK BOX 显示 为空白, 相反则显示 X , 可用在逻辑判断检查。Example:DATA: FLAG1 VALUE , FLAG2 VALUE X .WRITE: / Check Flag 1:, FLAG1 AS CHECKBOX.WRITE: / Check Flag 2

21、:, FLAG2 AS CHECKBOX.执行结果:赋值1、普通赋值语法: MOVE TO 将F1的值存至变量 F2 中, 也可写成 F2 = F1Example:MOVE CHAR TO M_NAME. 等价于M_NAME = CHAR.2、带偏移量的赋值语法: MOVE +() TO +将变量F1从O1+1位置开始len1长度的字符串赋值给变量F2从O2+1位置处开始的len2长度的字符串Example: DATA: F1(10) TYPE C VALUE ABCDEFGHIJ, F2(5) TYPE C. MOVE F1+3(5) TO F2. 相当于F2 = F1+3(5). 自F1第

22、4个开始的5个字符长度的串赋值给F2,即F2 = DEFGH.3、Field String 组件的复制语法: MOVE-CORRESPONDING TO .将Strings1中的field组件的数据复制至String2中, 仅复制相同名称的组件。 Example:DATA: BEGIN OF ADDRESS, FIRSTNAME(10) TYPE C VALUE Zhongsheng, LASTNAME(10) TYPE C VALUE Xu, TEL(12) TYPE C VALUE END OF ADDRESS. DATA:BEGIN OF NAME, FIRST

23、NAME(10) TYPE C , LASTNAME(10) TYPE C , E_MAIL(30) TYPE C , END OF NAME. MOVE-CORRESPONDING ADDRESS TO NAME. 结果:NAME-FIRSTNAME = Zhongsheng,NAME-LASTNAME = Xu,NAME-E_MAIL= 4、变量 CALL BY VALUE 的使用语法: WRITE () TO Example:DATA: NAME(20) TYPE C VALUE SOURCE, SOURCE(10) TYPE C VALUE LILY, TARGET(10) TYPE

24、C . WRITE (NAME) TO TARGET. WRITE / TARGET. 屏幕可打印出 LILY。5、清除变量内容,清空工作区和列表语法: CLEAR 清除变量现在内容,恢复成初值。Example:DATA N TYPE I VALUE 100. CLEAR N. 变量 N 的内容变成 0 6、字符串数据处理字符串移位语法: SHIFT BY PLACES : (1)空白,字符串往左移一位 (2)LEFT,字符串往左移 n 位 (3)RIGHT, 字符串往右移n位(4)CIRCULAR,字符串往左以环状方式移位Example:DATA STRING(10) TYPE C VALU

25、E ABCDEFGHIJ. SHIFT STRING. 得到 BCDEFGHIJ SHIFT STRING BY 2 PLACES RIGHT. 得到 ABCDEFGH SHIFT STRING BY 2 PLACES CIRCULAR. 得到CDEFGHIJAB取代字符串内容语法: REPLACE WITH INTO 将字符串 中的 以 来取代Example:DATA: STRING(10) TYPE C VALUE ABCDEFGHI, STR1(3) TYPE C VALUE DEF, STR2(3) TYPE C VALUE 123. REPLACE STR1 WITH STR2 IN

26、TO STRING. “STRING = ABC123GHI大小写的转换语法:TRANSLATE TO UPPER CASE. 转成大写 TRANSLATE TO LOWER CASE. 转成小写在字符串中寻找部分字符串语法:SEARCH FOR 会存至两个变量:SY-SUBRC和SY-FDPOS若找到则SY-SUBRC 为 0,SY-FDPOS 存开始位迭 若找不到则 SY-SUBRC为4,SY-FDPOS为 0字符串长度语法: STRLEN()Example:INT = STRLEN(XYZABC). 得到 6 INT = STRLEN(ABC). 得到 3取部分字符串语法: +Examp

27、le:DATA T(10) TYPE C VALUE ABCDEFGHIJ. WRITE / T+2(4). 得到 CDEF合并字符串(常用)语法: CONCATENATE . INTO SEPARATED BY .将字符串c1到cn合并到字符串c中,中间用s间隔Example:DATA: C1(10) VALUE Sum,C2(3) VALUE mer, C3(5) VALUE holi ,C4(10) VALUE day, C5(30), SEP(3) VALUE - .CONCATENATE C1 C2 C3 C4 INTO C5. 得到SummerholidayCONCATENATE

28、C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.得到Sum-mer-holi-day分割字符串(常用)语法:SPLIT AT INTO . .将字符串c在分割符del处分割,子串分别存放到c1到cn,如果del在c中出现多于n-1次,则后面所有的字符串和分割符都放在最后一个字符串cn中(如下面例子中的P4)Example:DATA: STRING(60), P1(20) VALUE +,P2(20) VALUE +,P3(20) VALUE +,P4(20) VALUE +, DEL(3) VALUE *.STRING = Part1*Part2*Part3*Part

29、4*Part5.SPLIT STRING AT DEL INTO P1 P2 P3 P4. P1 = Part1,P2 = Part2,P3 = Part3,P4 = Part4*Part5替换字符串语法:REPLACE WITH INTO LENGTH .将字符串c中的str1子串的前I个字符替换成str2子串,替换后超出c的长度的部分被丢弃 Example:DATA: T(10) VALUE abcdefghij, STRING LIKE T, STR1(4) VALUE cdef,STR2(4) VALUE klmn, STR3(2) VALUE kl,STR4(6) VALUE klm

30、nop , LEN TYPE I VALUE 2.STRING = T. STRING = abcdefghijREPLACE STR1 WITH STR2 INTO STRING. STRING = abklmnghijSTRING = T.REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.STRING = abklmnefghSTRING = T.REPLACE STR1 WITH STR3 INTO STRING. STRING = abklghijSTRING = T.REPLACE STR1 WITH STR4 INTO STRING. 越界

31、部分被丢弃STRING = abklmnopgh去前置空格语法: CONDENSE (F) NO-GAPS.其中: NO-GAPS 去所有空格加前导0,去前导0(适用于数字字符串)加前导0:CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT去前导0:CALL FUNCTION CONVERSION_EXIT_ALPHA_OUTPUT运算符及函数1、算术符号符号 */+-DIVMOD描述乘幂乘除加减整数除法余数除法2、数值函数 (很少用)ABS(N): 传回数值 N 的绝对值SIGN(N): 1(N 0时); 0(N = 0时); -1(N 0时)CEIL(N):

32、 传回大于数值N的最小整数 Example: WRITE CEIL(-5.65) 5.00WRITE CELL(4.54) 5.00FLOOR(N): 传回小于数值N的最大整数Example:WRITE FLOOR(-5.65) 6.00WRITE FLOOR(4.54) 4.00TRUNC(N): 传回数值N的整数部分Example:WRITE TRUNC(5.65) 5.00FRAC(N): 传回数值 N 的小数部分Example:WRITE FRAC(5.65) 0.65COS(A),SIN(A),TAN(A): 三角函数 cos A, sin A,tan A 的值,A为弧度值EXP(N

33、):传回 eN 值LOG(N): 传回 log eN 值LOG10(N): 传回 log N值SQRT(N): 传回 N 的平方根值3、日期与时间的运算日期数据的运算日期数据可以直接运算, 如加法与减法的运算Example: DATA: Mdata TYPE D.Mdate = 19971015. Mdate+6(2) = 01. Mdate 变成 19971001 Mdate = Mdate - 1 Mdate 变成 19970931时间数据的运算时间格式为 hhmmss, 如 212030 表示 21:20:30Example:DATA: HOURS TYPE I,MINUTES TYPE

34、 I, T2 TYPE T VALUE 200000, T1 TYPE T VALUE 183000.HOURS = (T2 - T1) / 3600. 计算T1和T2之间相差几小时MINUTES = (T2 T1) / 60. 计算T1和T2之间相差几分钟流控制1、比较符号= 或 =ANDORNOTEQNELTLEGTGE等于不等于小于小于等于大于大于等于并且或非2、条件语句IF语句(与C语言中if.else if.else.语句相同)语法: IF .ELSEIF . . ELSE. ENDIF. 注:在每个判断语句之后要加上 语句结束符.CASE 语句(与C语言中switch.case.语

35、句相同)语法: CASE . WHEN . WHEN . . WHEN OTHERS. ENDCASE.3、循环语句计数循环语句语法: DO n TIMES VARYING FROM TO . ENDDO.选项n TIMES:循环n次选项VARYING FROM TO :从start循环到end,将当前循环的值赋值给fExample1: DO 2 TIMES. WRITE / X. ENDDO.执行结果: X XExample2: DO VARYING I FROM1 TO 10. S = S + I. ENDDO. WRITE: / ,1+2+3+10=,S执行结果:1+2+3+10=55条

36、件循环语法: WHILE . ENDWHILE内表循环语法:LOOP AT ASSIGNING |INTO WHERE . ENDLOOP.用于内表数据条目的循环,详细内容在内表一节叙述4、循环控制语句CONTINUE: 跳至循环的下一次Example:DO 3 TIMES.执行结果: 1 3 IF SY-INDEX = 2. CONTINUE. ENDIF. WRITE: / SY-INDEX. ENDDO. CHECK CHECK 之后条件成立才继续往下执行循环执行结果:2 3 4Example:DO 5 TIMES. CHECK SY-INDEX BETWEEN 2 AND 4. WRI

37、TE / SY-INDEX. ENDDO.EXIT:跳离循环语句Example:DO 10 TIMES. IF SY-INDEX = 4.执行结果:1 2 3 EXIT. ENDIF WRITE / SY-INDEX. ENDDO. 5、无穷循环语法: DO . ENDDO.无穷循环必须配合 EXIT语句来执行注释结构可以在程序的任意处插入注释行,在程序中有两种方法表明注释:如果要整行加入注释,则可在行开始处输入星号(*);如果要某行的一部分(后面一部分)变为注释,则在注释之前输入双引号()。例:PROGRAM SAPMTEST.* The following line contains a

38、WRITE statementWRITE First Program. Output on List内表内表索引表内部的索引索引是表格行的序列号,不是表格字段,但由系统自动创建和管理。可以用 DELETE、INSERT、MODIFY、LOOP 和READ语句来使用索引。在这些语句中, 可以将索引指定为文字或变量。处理完内表的特定行后,系统字段sy-tabix一般包含该行的索引。访问内表内表是按行进行访问的。必须使用某个工作区域作为与表格互相传输数据的接口 。从内表中读取数据时,已定址的表格行内容覆盖工作区域的内容。然后可以在程序中引用工作区域的内容。将数据写入内表时,必须首先在工作区域(从中系

39、统可以将数据传输给内表)中输入数据,如图2-1所示。图2-1为了避免不一致,最好是工作区域与内表行有相同的数据类型。创建与内表兼容的工作区域的一种安全步骤是在说明内表和工作区域时使用相同的数据类型。在该环境中,可以区分ABAP/4中两种类型的内表的差别:带表头行的内表、不带表头行的内表如果创建带表头行的内表,系统自动创建与内表行数据类型相同的工作区域。该工作区域称为表头行或表格工作区域,对内表的作用与由TABLES语句创建的数据库表格工作区域相同。表格工作区域和内表本身同名。在所有用于访问内表的ABAP/4 语句中,可以指定要使用的工作区域。对于带表头行的内表,可以忽略这一指定。这样,系统隐式

40、使用表格工作区域,如图2-2所示。图2-2不带表头行的内表没有可以隐式使用的表格工作区域。要访问没有表头行的内表,必须在相应的ABAP/4语句中显式指定工作区域。决定创建的内表是否带表头行时,必须考虑是喜欢隐式还是显式用于内表访问的工作区域。请记住,对于带表头行的内表,内表本身和表格工作区域同名。如果在语句中使用该名称,系统将其解释为表格工作区域的名称,而不是表格本身,要用表格本身,则需要在表名后加上。Example: DATA: BEGIN OF WA_ITAB OCCURS 0, . END OF WA_ITAB. CLEAR: WA_ITAB, 清空工作区的内容 WA_ITAB. 清空内

41、表的内容内表的声明ABAP/4的内部表如同其它语言的数组结构,在操作上可以有复制、删除、新增、插入等功能。 1、使用 TYPE 语句语法: TYPES TYPE OCCURS 声明一个数组 ,型态为 ,长度为 Example1: TYPES A TYPE I OCCURS 10. A 是个10个元素的数值内部表Example2:TYPES: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, COL3 TYPE I, END OF LINE. TYPES ITAB TYPE LINE OCCURS 10. 对应一个内表的类型 声明一个内部表 ITAB, 总共有10

42、个元素, 其工作区名称为 LINE (用到OCCURS分配内存,意思是内部表,否则是指作业领域) Example: DATA: WA_DD02 TYPE LINE. 作业领域WA_DD02定义如果LINE由DATA定义,则为变量,定义内部表示用: DATA ITAB LIKE LINE OCCURS 10. 如果LINE由TYPE定义,则为一种新的数据类型,定义内部表的时候使用:TYPES ITAB TYPE LINE OCCURS 10.2、使用 DATA 语句 若使用DATA语句来声明内部表, 可分成要不要有HEADER LINE(表头),HEADER LINE就是所谓的作业领域, 用于内

43、表数据的存取。语法: DATA OCCURS WITH HEADER LINEExample:DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.内表只有一个字段 3、直接声明, 不使用作业领域语法:DATA: BEGIN OF OCCURS , END OF .Example: DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB.如此产生的内部表不会有作业领域, 也就是声明时不会引用其它的Conponent 声明。4、内部表和作业领域的区别: 内部表可以被包含两行及两

44、行以上的纪录,作业領域只能有一行纪录。 5、内部表的区分a.根据定义方式区分如: TYPES: BEGIN OF T_DD02.END OF T_DD02.语法1: DATA TYPE |LIKE OCCURS 0 WITH HEADER LINE. Example: DATA: IT_DD02 TYPE T_DD02 OCCURS 0 WITH HEADER LINE.语法2: DATA TYPE|LIKE OF WITH INITIAL SIZE WITH HEADER LINE.Example:DATA ITAB TYPE HASHED TABLE OF SPFLI WITH UNIQU

45、E KEY CARRID CONNID.内表有三种类型:标准表(Standard)、排序表(Sorted)、哈希表(Hashed)其中,排序表和哈希表是索引表b.根据表的属性区分带HEADLINEExample1:DATA IT_TC TYPE T_DD02 OCCURS 0 WITH HEADER LINE.Example2:DATA: BEGIN OF T_DD02 OCCURS 0, .END OF IT_TC. 不带HEADLINEExample1:DATA IT_TC TYPE T_DD02 OCCURS 0. DATA IT_TC TYPE TABLE OF T_DD02. Exa

46、mple2: DATA: BEGIN OF IT_TC, .END OF IT_TC.一般不要使用带表头的内表,带表头的内表容易造成程序BUG,而且将逐渐被SAP淘汰一般使用标准表,如果需要大量处理数据并且数据查找频繁的时候建议使用排序表或哈希表c.带KEY的内部表定义语法:DATA IT_TC TYPE TABLE OF T_DD02 WITH UNIQUE|NON-UNIQUE .内表的使用1、Append行语法1: APPEND | TO Initial Line To . 可不带headlineInitial Line To 为增加一预设初值的元素语法2: APPEND . 带head

47、lineExample1:使用Work AreaDATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE LINE OCCURS 10. DO 2 TIMES. LINE-COL1 = SY-INDEX. SY-INDEX为循环的 Counter LINE-COL2 = SY-INDEX * 2. APPEND LINE INTO ITAB. 新增至 内部 表中 ENDDO. LOOP AT ITAB INTO LINE. ITAB 总共有行 WRITE: / LINE-COL1,LINE-COL2.

48、ENDLOOP. 执行结果为: 1 1 2 4Example2:不使用 Work Area DATA: BEGIN OF ITAB OCCURS 10, COL1 TYPE I, COL2 TYPE I, END OF ITAB. DO 2 TIMES. ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX * 2. APPEND ITAB. 新增至 内部 表中 ENDDO. LOOP AT ITAB. ITAB 总共有两个元素 WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 执行结果与上面的一样2、加入另一内部表的元素语法:APP

49、END LINES OF FROM TO TO 将内表itab1的元素追加至内表itab2中,可选取条目自n1至n2的范围Example:APPEND LINES OF ITAB TO JTAB. 将ITAB所有元素追加到JTAB中3、汇总行语法: COLLECT | INTO 在加入新元素时将有相同standard key(非数值字段)的数值字段汇总Example: DATA: BEGIN OF ITAB OCCURS 3, COL1(3) TYPE C, COL2 TYPE I, END OF ITAB. ITAB-COL1 = ABC. ITAB -COL2 = 10. COLLECT

50、ITAB. ITAB-COL1 = XYZ. ITAB-COL2 = 20. COLLECT ITAB. ITAB-COL1 = ABC. ITAB-COL2 = 30. COLLECT ITAB. 汇总COL2 至 COL1=ABC 的元素上 LOOP AT ITAB. WRITE: / ITAB-COL1,ITAB-COL2. ENDLOOP. 执行结果: ABC 40 XYZ 204、插入行插入元素在指定的内部表位置之前语法1:INSERT | INTO INITIAL LINE INTO TABLE INDEX INITIAL LINE INTO 为增加一预设初值的元素,可不带head

51、line语法2:INSERT 带headlineExample: DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE LINE OCCURS 10. DO 3 TIMES. LINE-COL1 = SY-INDEX *10. LINE-COL2 = SY-INDEX *20. APPEND LINE INTO ITAB. ENDDO. LINE-COL1=100. LINE-COL2=200. INSERT LINE INTO ITAB INDEX 2. 插入在位置2处 LOOP AT ITAB

52、INTO LINE. WRITE: / SY-TABIX,LINE-COL1,LINE-COL2. SY-TABIX为表位置 ENDLOOP. 执行结果: 1 10 20 2 100 200 插入的行 3 20 40 4 30 605、插入另一内部表元素语法:INSERT LINES OF FROM TO TO INDEX 将itab1的元素插入至itab2中,位置在 idx之前,可选取自n1至n2的范围Example:INSERT LINES OF ITAB TO JTAB INDEX 3. 将ITAB所有元素插入JTAB中, 位置在第三个元素之前6、内部表元素数据的读取语法: LOOP A

53、T INTO |ASSIGNING FROM TO WHERE ENDLOOP根据设定的范围选取原素资料,读完后自动移往下一项Example1:LOOP AT ITAB INTO LINE WHERE COL1 100. WRITE: / SY-TABIX,LINE-COL1. ENDLOOP.仅读取 COL1 100 的元素 Example2: LOOP AT IT_ ITAB INTO WA_ ITAB. IT_ ITAB可为不带表头的内部表在数据量大的时候,建议用ASSIGN 代替INTO ,这样会明显提高程序的执行效率,但是注意程序中对的修改是直接对内表内容的修改7、读取内部表指定位置

54、的元素语法: READ TABLE INTO |ASSIGNING INDEX 自指定位置 或指定的字段读取元素数据Example:READ TABLE IT_ITAB INTO WA_LINE INDEX 5.读取 IT_ITAB的第5个条目的数据, 放入工作区 WA_LINE对应的字段中8、根据字段内容寻找语法: READ TABLE INTO |ASSIGNING WITH TABLE KEY = A = B .BINARY SEARCH 1、用WHERE选项的时候必须用系统字段sy-subrc的值来判断是否读取成功,读取成功的情况下(sy-subrc = 0)才能对其工作区()或数据域

55、()进行操作、 2、使用BINARY SEARCH之前必须先对内表进行排序(sort)且WHERE后面的字段最好与排序的字段一致或者为其子集数据量大的时候,为提高程序效率,建议用二分查找(BINARY SEARCH)Example:READ TABLE IT_TC WITH KEY COL1 = ABC. IT_TC为带表头的内部表当IT_TC中有多个条目中满足条件COL1 = ABC的时候,只顺序读取第一条满足条件的记录,不带表头的内部表必须指定工作区或数据域(即必须用INTO 或ASSIGNING 选项)9、读取内部表的元素MOVE-CORRESPONDING IT_TC TO WA_TC

56、. IT_TC必须是带headline的把表头赋给一个结构READ TABLE IT_TC INTO WA_TC INDEX I.MOVE-CORRESPONDING WA_TC TO WA_2. 不带headline的用法10、指定特别处理选项语法:READ TABLE INTO |ASSIGNING COMPARING . | ALL FIELDSTRANSPORTING . | ALL FIELDS| NO FIELDS. 使用COMPARING选项: 在TRANSPORTING前,使用工作区的相应的字段与表中的字段 .比较 使用ALL FIELDS选项:比较所有字段 使用TRANSPO

57、RTING选项:传送将指定字段输入到工作区的字段中这种情况一般用于内表结构与工作区域结构不一样的时候11、修改元素内容语法:MODIFY FROM | INDEX TRANSPORTING WHERE TRANSPORTING . : 指定修改的字段名称Example1: LINE-COL1 = 4. LINE-COL2 = 100. MODIFY ITAB FROM LINE. 将目前位置元素以LINE的内容修改Example2: LINE-COL1 = 10. MODIFY ITAB FROM LINE INDEX 3 TRANSPORTING COL1. 将第三个元素的COL1字段修改为

58、 10Example3:IT_TC 带headline的用法:MODIFY TABLE IT_TC WHERE MODIFY IT_TC.MODIFY IT_TC INDEX SY-TABIX.Example4:不带headline的用法:MODIFY TABLE IT_TAB FROM WA_TAB.MODIFY IT_TAB FROM WA_TAB TRANSPORTING COL2 WHERE COL1 = 10. 12、删除行 删除内部表的元素语法1: DELETE INDEX Example1: DELETEITAB INDEX 4. 删除第四个元素,ITAB带HEADLINE语法2

59、: DELETE FROM TO WHERE Example2: DELETE ITAB FROM 3 TO 10. 删除第3至第10个元素,ITAB带HEADLINEExample3: DELETE IT_TC WHERE CHECKED = C_CHECKED. Example4: DELETE ITAB FROM WA_TC. ITAB可不带表头13、内部表排序语法: SORT ASCENDING |DESCENDING BY DESCENDING为降序,ASCENDING为升序,省略时为升序。 :为指定的字段 Example1: SORT ITAB DESCENDING BY COL2

60、. 将 ITAB 根据 COL2字段降序排列Example2: SORT ITAB BY ZXHINMEI WERKS.内表在使用重复项删除(DELETE ADJACENTDUPLICATESFROM)或二分读取(BINARY SEARCH)前一定要进行排序操作14、LOOP 循环语法:LOOP AT WHERE . .ENDDLOOP.Example:带headlineLOOP AT IT_TAB. IT_TAB-COL1 = 2. MODIFY IT_ITAB.ENDLOOP.不带headlineLOOP AT IT_TAB_NOHEADLINE INTO WA_TAB. WA_TAB-C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论