ABAP初学总结

5. 更改数据库表

5.1 Insert/ Clear/ Update/ Modify/ Delete (delete from table where )

6.程序流程控制和逻辑表达

6.1 IF 条件选择
6.1.1 IF…ELSEIF …ELSE…ENDIF.
DATA: surname (15) type c.
surname = 'smith'.

IF surname = 'smith'.
 WRITE 'youve won a car!'.
ELSEIF surname = 'BROUN'.
 WRITE 'youve won a plane!'.
ELSE.
 WRITE 'you go home empty handed.'
ENDIF.
6.1.2 AND/OR/NOT
DATA: surname(15) type c,
       forename(15) type c.
surname = 'smith'.
forename = 'Green'.

IF surname = 'smith' AND forename = 'Green'.
 WRITE 'youve won a car!'.
ELSE.
 WRITE 'you go home empty handed.' 
ENDIF.
6.1.3 嵌套IF
DATA: surname(15) type c,
       forename(15) type c.
surname = 'smith'.
forename = 'Green'.

IF surname = 'smith'.
 WRITE 'youve won a car!'.
 IF forename = 'Green'.
  WRITE 'youve won another car!'.
 ENDIF.
ELSE. 
 WRITE 'you go home empty handed.' 
ENDIF.

在这里插入图片描述

6.2 CASE 条件选择
6.2.1 CASE…WHEN…WHEN OTHERS…ENDCASE.
DATA: surname(15) type c,
       forename(15) type c.
surname = 'smith'.
forename = 'Green'.

CASE surname.
 When 'SMITH'.
  Write 'youve won a car!'.
 When 'JONES'.
  Write 'youve won a plane!'.
 When others.
  Write 'youve won nothing.'.
ENDCASE.
  
6.2.2 嵌套CASE
DATA: surname(15) type c,
       forename(15) type c.
surname = 'smith'.
forename = 'Green'.

CASE surname.
 When 'SMITH'.
  Write 'youve won a car!'.
  CASE forename.
  When 'Green'.
   Write 'you are excellent.'.
  When others.
   Write 'who are you?'.
  ENDCASE.
 When 'JONES'.
  Write 'youve won a plane!'.
 When others.
  Write 'youve won nothing.'.
ENDCASE.
  
6.2.3 CASE和IF区别

区别就是CASE后面只能跟一个条件表达式。不能像IF那样可以加AND/OR 啥的连着多个条件。

6.3 LOOP 迭代
6.3.1 SELECT…ENDSELECT.

无条件迭代。

TABLES: zemployees.
SELECT * FROM zemployees.
 WRITE:zemployees.
ENDSELECT.

有条件迭代。

TABLES: zemployees.
SELECT * FROM zemployees where surname = 'SMITH'.
 WRITE:zemployees.
ENDSELECT.

6.3.2 DO.(TIMES)…ENDDO.
DATA: a type i.

a = 0.
DO 15 TIMES.
a = a + 1.
WRITE: a.
ENDDO.

DO的次数系统变量sy-index会显示。

6.3.3 嵌套DO

如果DO没有限制,系统会一直DO下去。嵌套的DO每一个系统都会分配一个sy-index.
要考虑系统要干多少活。嵌套就是外层N内层M次。一共NM次循环。

DATA: a type i,
      b type i,
      c type i.

a = 0.
c = 0.
*b = 0.*
DO 15 TIMES.
a = a + 1.
WRITE: 'outer loop cycle:', a.
 b = 0. 要把嵌套的赋值写在嵌套里面。
 DO 10 TIMES.
 b = b + 1.
 WRITE : 'inner loop cycle: ', b.
 ENDDO.
 c = c + b.
ENDDO.
c = c + a.
WRITE : ' total iterations:' , c .
6.3.3 WHILE…ENDWHILE.
DATA: a type i.
a = 0.

WHILE a <> 15.
 WRITE :/'loop cycle: ', a .
 a = a + 1.
ENDWHILE.

6.3.4 嵌套WHILE
DATA: a type i,
      b type i.

a = 0.

WHILE a <> 15.
 WRITE :/'loop cycle: ', a .
 a = a + 1.
 b = 0.
 WHILE b <> 10.
  WRITE : 'inner loop', b .
  b = b + 1 .
 ENDWHILE.
ENDWHILE.

6.3.5 DO 和 WHILE的区别

do 就是直接开干啊。干啥,干多少次。要和多少次结合在一起。
while 得判断一下是否符合条件。不符合就直接跳出了。但是要给出不符合的条件增值啊。要不然一直循环。

6.3.6 提前终结迭代-CONTINUE/CHECK

continue: 跳过满足的循环条件,直接回到LOOP开头,执行下一次循环。

DATA: a type i.

a = 0.
DO 15 TIMES.
a = a + 1.
 IF sy-index = 2 .
  CONTINUE.
 ENDIF.
WRITE: a.
ENDDO.

当执行第二条a=2时,跳出回到开头,最后输出结果没有2. 只有1,3,4,5,6,7,…15.

DATA: a type i.

a = 0.
DO 15 TIMES.
a = a + 1.
 CHECK sy-index <> 2.
WRITE: a.
ENDDO.

用一条CHECK代替IF 和 CONTINUE。
满足条件才执行。

如果CHECK不在loop里,在一段代码中间,那么不满足check的话,下面的代码都不会被执行。

6.3.7 结束迭代-EXIT

EXIT直接退出。

DATA: a type i.

a = 0.
DO 15 TIMES.
a = a + 1.
 IF sy-index = 3.
 EXIT.
 ENDIF.
WRITE: a.
ENDDO.

7. 选择屏幕

7.1 event

是一段代码块。
这个代码块的终结是下一段代码的开始。也就是不会有明显的终结语句。
可以是被一个sub program 或者是结束的程序来结束。
我们执行程序实际上是由运行环境的预定义进程来控制。
在这里插入图片描述
*** 2021.11.29 待更新
后续:
ABAP 面向对象编程.

猜你喜欢

转载自blog.csdn.net/weixin_45689053/article/details/121491923