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 面向对象编程.