1、宏模块
----------------------------------------------------------------------------------------
(1) 宏定义:
DEFINE <macro>.
<宏叙述>.
END-OF-DEFINITION.
(2) 宏使用:
<macro> [<p1> <p2>….]
* <p1> 为传入宏的参数值, 在参数间至少要给予一个空白
2、包含子程序
------------------------------------------------------------------
语法:INCLUDE <include program file>
作用:用于共享数据项,比如全局变量
3、子程序
------------------------------------------------------------------
1、声明:
FORM <subr> [<pass>].
<subroutine statement block>
ENDFORM.
2、调用:
(1) 内部调用:PERFORM <subr> [<pass>]
(2) 外部调用:
① 调用另一程序
PERFORM <subr>(<prog>) [<pass>] [IF FOUND]
② 调用另一专存放子程序的程序文件
PERFORM (<fsubr>) [IN PROGRAM (<fprog>) [<pass>] [IF FOUND]
* 参数传递
------------------------------------------------------------------
(1) 地址传递:
FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]
或
PERFORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]
(2) 值传递:
FORM <subr> USING VALUE(<f1>…)
或
PERFORM <subr> USING <f1>
(3) 传入时值传递,传出时改变返回参数值
FORM ….. CHANGING VALUE(<f1>
或
PERFORM …. CHANGING …. <f1>
* Check控制:CHECK <Condition>,只有条件成立才继续往下子程序叙述
4、函数
------------------------------------------------------------------
(1) 查看系统函数
(2) 函数呼叫:
CALL FUNCTION <module>
IMPORTING F1=a1….
EXPORTING F1=a1….
CHANGING F1=a1…
TABLES F1=a1…
EXCEPTIONS F1=a1…
一、SQL分类
--------------------------------------------------------------------------------------
1、按操作分类:DDL和DML
2、按是否有缓存分类:
(1) OPEN SQL :数据库与命令编译器存在缓存,如Select * From <Itab>....
(2) Native SQL:直接处理
二、创建字典表
--------------------------------------------------------------------------------------
语法:TABLES table
三、处理字典表
--------------------------------------------------------------------------------------
1、查询
------------------------------
语法:SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>]
[GROUP BY <fields>] [ORDER BY <sort_order>].
2、插入
------------------------------
(1) Work Area插入:
语法:INSERT INTO <database> VALUES <wa>
(2) 表间插入
语法:INSERT <database> FROM TABLE <itab> [ACCEPTING DUPLICATE KEY]
3、更改
------------------------------
(1) 更改单行
语法:UPDATE <dbtab> [CLIENT SPECIFIED] FROM <wa>.
或
UPDATE <dbtab> [CLIENT SPECIFIED].
(2) 更改多行
语法:UPDATE <database> SET < f1>=<values>… WHERE <condition>.
(3) 表间更改
语法:UPDATE <dbtab> [CLIENT SPECIFIED] FROM TABLE <itab>.
(4) Modify更改(有则更改,无则插入)
语法:MODIFY <database> FROM <wa>.
4、删除
------------------------------
(1) 使用关键字删除
语法:DELETE <database> FROM <wa>
(2) 使用条件删除
语法:DELETE FROM <database> WHERE <condition>
5、使用游标
------------------------------
(1) 打开:
语法:OPEN CURSOR <c> FOR SELECT … WHERE <condition>
(2) 使用:
语法:FETCH NEXT CURSOR <c> INTO <wa>
(3) 关闭:
语法:CLOSE CURSOR <c>
四、提交与回退
--------------------------------------------------------------------------------------
(1) 提交:COMMIT WORK
(2) 回退:ROLLBACK WORK
一. 什么是内表
----------------------------------------------------------------------------------------------------------
(1) 内表:仅在程序运行时存在的表格
(2) 作用:
① 系统可实时增加内表的大小
② 可根据程序需要重新组织数据库表格的内容
(3) 内表结构:数据类型和数据对象,相当于类与对象的关系
(4) 标记表格行:内表索引/关键字
(5) 访问内表:按行访问
二、创建内表
----------------------------------------------------------------------------------------------------------
(1) Type创建:先声明,后使用
语法:TYPES <t> <type> OCCURS <n>.
(2) Data创建:使用Work Area
DATA <f> <type> OCCURS <n> [WITH HEADER LINE].
(3) Data创建:不使用Work Area(直接宣告)
语法:DATA: BEGIN OF <f> OCCURS <n>,
<component declaration>,
..............
END OF <f>.
三、使用内表
----------------------------------------------------------------------------------------------------------
1、增加
(1) 增加行(可能有重复行)
语法:APPEND [<wa> TO|INITIAL LINE TO] <itab>.
(2) 根据标准关键字附加行(没有重复行)
语法:COLLECT [<wa> INTO] <itab>.
(3) 表外增加
语法:APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2>.
2、插入
(1) 在指定行前插入
语法:INSERT [<wa> INTO|INITIAL LINE INTO] <itab> [INDEX <idx>].
(2) 外表插入
语法:INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>]
INTO <itab2> [INDEX <idx>].
3、修改
语法:MODIFY <itab> [FROM <wa>] [INDEX <idx>].
4、删除
(1) 在循环中删除行
语法:Loop At <Itab> (Into type)
DELETE <itab>.
End Loop.
(2) 用索引删除行
语法:DELETE <itab> INDEX <idx>.
5、查询
(1) 循环读取
语法:LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>] [WHERE <condition>].
.....
ENDLOOP.
(2) 用索引读取单行
语法:READ TABLE <itab> [INTO <wa>] INDEX <idx>.
(3) 读取有关键字的单行
语法:READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].
6、排序
语法:SORT <itab> [<order>] [AS TEXT]
[BY <F1> [<order>] [AS TEXT] ... <fn> [<order>] [AS TEXT]].
7、汇总
(1) 非数值汇总
语法:COLLECT [<wa> INTO] <itab>.
(2) 数值汇总
语法:Loop At <Itab> (Into type)
Sum.
End Loop.
8、清除
(1) REFRESH <itab>.
解释:初始化没有表头的内表,清除所有元素
(2) CLEAR <itab>.
解释:初始化有表头的内表,清除所有元素
(3) FREE <itab>.
解释:重置内表并直接释放其内存,须在REFRESH或CLEAR后使用
1、 顺序
2、选择:IF和CASE
--------------------
(1) IF语法:
IF <condition1>.
<statement block>
ELSEIF <condition2>.
<statement block>
ELSEIF <condition3>.
<statement block>
.....
ELSE.
<statement block>
ENDIF.
(2) CASE语法:
CASE <f>.
WHEN <F1>.
<statement block>
WHEN <F2>.
<statement block>
WHEN <F3>.
<statement block>
WHEN ...
......
WHEN OTHERS.
<statement block>
ENDCASE.
3、 循环:DO和WHILE
------------------------------------
(1) 计次循环:
DO [<n>TIMES] [VARYING <f> FROM <F1> NEXT <F2>].
<statement block>
ENDDO.
(2) 无限循环:
DO .
<Statement Block>
ENDDO.
(3) 条件循环:
WHILE <condition> [VARY <f> FROM <F1> NEXT <F2>].
<statement block>
ENDWHILE.
* 终止循环:
------------------------------------
① 无条件终止循环:CONTINUE
② 有条件终止循环:CHECK
③ 完全终止循环: EXIT
1、数值函数
-----------------------------------------------------------------------------------
abs、sign、ceil、floor、trunc、frac、cos、sin、tan、exp、log、log10、sqrt
2、日期与时间运算
--------------------------------------------------------------------------
(1) 日期数据:
DATA: Mdata TYPE D.
Mdate = SY-DATUM. “ 如传回 19971015
Mdate+6(2) = ‘01’ “ Mdate 变成 19971001
Mdate = Mdate - 1 “ Mdate 变成 19970931
(2) 时间数据:
DATA: HOURS TYPE I,
MINUTES TYPE I,
T2 TYPE T VALUE ‘200000’,
T1 TYPE T VALUE ‘183000’.
HOURS = (T2 - T1) / 3600. “计算有几小时
MINUTES = (T2 – T1) / 60. “计算几分钟
3、运算符号:
--------------------------------------------------------------------
(1) 算术符:+ - * / div mod
(2) 比较符:> >= < <= = <> ><
EQ NE GT LT GE LE
And Or Not
(1) 移位:Shift 变量名 [by <n> places] [modes]
(2) 替换:Replace <Str1> with <Str2> into <c>
(3) 大小写:Translate <c> to Upper/Lower Case
(4) 寻找: Search <c> for <Str>
(5) 长度: Strlen(str)
(6) 取部分:<f>[+<o>][<l>]
* 示例:
DATA T(10) VALUE ‘ABCDEFGHIJ’.
WRITE / T+2(4). “得到 CDEF
1、赋值
---------------------------------------------------------------------------------------
(1) 全部赋值:Move <F1> to <F2>.
(2) 部分赋值:Move <F1>[+<O1>] to <F2>[+<O2>].
(3) 组件(字段)复制:Move Corresponding <Str1> to <Str2>.
(4) 传值:WRITE (<f>) TO <g>
2、清值
---------------------------------------------------------------------------------------
CLEAR <f>
1. Write的格式:
-------------------------------------
(1) 不指定位置输出:Write 资料项.
(2) 指定位置输出: Write AT [/] [<pos>] [(<len>)] 资料项.
(3) 指定显示格式: WRITE 数据项 <显示格式参数>.
(4) 输出图标: WRITE <symbol-name> AS SYMBOL.
WRITE <icon-name> AS ICON.
(5) 输出、垂直线、空行:
① 水平线:write [at [/][<pos>][(<len>)]] sy-uline.
② 垂直线:write [at [/][<pos>]] sy-vline.
③ 空行: WRITE SKIP [<n>].
(6) 输出复选框: Write 标签,变量 As CheckBox.
2. 跳至指定列坐标:Skip to line [<n>].
* 资料项指变量或常量
* 预定义数据类型的输出格式
----------------------------------------------
数据类型 输出长度 定位
C 字段长度 左对齐
D 8 左对齐
F 22 右对齐
I 11 右对齐
N 字段长度 左对齐
P 2*字段长度(+1) 右对齐
T 6 左对齐
X 2*字段长度 左对齐
----------------------------------------------
在屏幕上,输出通常是左对齐的; 但数据类型F、I和P是右对齐的,左边用空格填充。
* 预定义数据类型
--------------------------------------------------------------------------------------------------------------
Type Length Range Initial Value Description
C 1 1-65535Byte Space 字符串数据, 如’Program’
D 8 8Byte ‘00000000’ 日期数据, 格式为YYYYMMDD
F 8 8Byte 0 浮点数
I 4 -2^31至2^31-1 0 整数
N 1 1-65535Byte ‘00…0’ 数值所组成的字符串
P 8 1-16Byte 0 Packed 数, 用在小数点数
T 6 6Byte ‘000000’ 时间数据, 格式为HHMMSS
X 1 1-65535Byte X’00’ 16进位数
1、定义数据结构
----------------------------------------------------------------
(1) 变量: Data 变量名 Type 变量类型,如:Data S1 Type I.
(2) 常量:Constants 常量名 Type 变量类型,如:Constants PI Type P 3.1415926.
(3) 静态变量:STATICS <c> [<length>] <type> [<value>] [<decimals>]
(4) 自定义变量类型:
Types: Begin of 自定义变量类型,
变量名1 Type 变量类型1,
变量名2 Type 变量类型2,
End of 自定义变量类型.
Data 自定义变量 Type 自定义变量类型.
(5) 字段变量:
Data: Begin of Address,
Name(10) Type C,
Number Type P,
End of Address.
(6) 内表:
Table: 表名.
例:
TABLES: SPFL.
SELECT * FROM SPFL.
WRITE: SPFL-MANDT, SPFL-CARRID,SPFL-CONNECTION.
ENDSELECT.
2、系统定义数据
-----------------------------------------------------------------
SPACE 空白字符串
SY-SUBRC 系统执行传回值, 0 表示成功
SY-UNAME logon帐号
SY-DATUM 系统日期
SY-UZEIT 系统时间
SY-TCODE 目