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 目