ABAP隨筆
- 緒論
- ABAP作業區的主要 T-CODE (4)
- 第1章 包與變更傳輸系統(CTS)
- 第2章 資料型別
- 2.1 概要
- 2.1.6 ABAP命名規則(23)
- 2.2 ABAP基本資料型別
- 基本資料型別(30)
- 系統變數sy-datum(系統)和sy-datlo(本地)的區別(37)
- String相關命令(39)
- ①FIND
- ②REPLACE
- ③TRANSLATE
- ④SHIFT
- ⑤CONDENSE
- ⑥OVERLAY
- ⑦CONCATENATE
- ⑧SPLIT
- 單引號“ ’ ”與grave“ ` ”的區別(39)
- 資料字典型別與ABAP基本資料型別
- 2.5 賦值
- 2.5.1 給變數賦值(52)
- 第3章 OPEN SQL 與 NATIVE SQL
- 3.1 概要
- 3.1.4 OPEN SQL 與 NATIVE SQL
- 1. OPEN SQL
- 2. NATIVE SQL
- 3.1.6 OPEN SQL 概要
- OPEN SQL 命令陳述句(62)
- 3.2 OPEN SQL ——讀取資料
- 讀取資料的命令(62)
- 3.2.1 SELECT 陳述句
- 2. 一條資料(63)
- 3. Several Line(63)
- 4. AS(別名)(64)
緒論
ABAP作業區的主要 T-CODE (4)
| T-CODE | 描述 | 說明 |
|---|---|---|
| SE09 | 傳輸組織 | 釋放/創建/修改CTS(變更傳輸系統)的開發工具 |
| SE11 | ABAP資料字典 | 創建如資料表,視圖,結構體等物件的開發工具 |
| SE16 | 資料庫資料編輯器 | 創建/修改/查詢資料庫表資料的開發工具 |
| SE21 | 包編輯器 | 創建/修改/查詢包的開發工具 |
| SE24 | 類編輯器 | 創建/修改/查詢類的開發工具 |
| SE37 | 函式編輯器 | 創建/修改/查詢函式的開發工具 |
| SE38 | ABAP編輯器 | 創建/修改/查詢ABAP程式的開發工具 |
| SE41 | 選單制作器 | 給程式創建GUI狀態 |
| SE43 | 維護區域選單 | 創建/修改/查詢SAP選單的開發工具 |
| SE80 | 物件導航器 | 集合了所有與ABAP開發相關的作業區 |
| SE91 | 建立訊息類和訊息 | 創建/修改/查詢訊息類的開發工具 |
| SE93 | 維護事務碼 | 創建/修改/查詢事務碼的開發工具 |
| SM04 | 用戶監視 | 監視用戶的活動 |
| SM12 | 鎖查看與維護 | 鎖定物件/表條目凍結說明 |
第1章 包與變更傳輸系統(CTS)
第2章 資料型別
2.1 概要
2.1.6 ABAP命名規則(23)
- 全域變數G 區域變數L,欄位V/D 結構體S 常量C 內表T 類O RANGE(范圍)R 參照變數(資料物件)F 例:GV_CARRID
2.2 ABAP基本資料型別
基本資料型別(30)
| 初始長度 | 可變長度 | 初始值 | 意義 | |
|---|---|---|---|---|
| 數字型 | ||||
| I | 4 | 4 | 0 | 整數(自然數) |
| F | 8 | 8 | 0 | 浮點型 |
| P | 8 | 1-16 | 0 | Packed number 整數=16-小數指定 |
| 字符型 | ||||
| C | 1 | 1~65535 | ‘……’ | 文本欄位(alphanumeric characters) |
| D | 8 | 8 | ‘00000000’ | 日期欄位(樣式:YYYYMMDD) |
| N | 1 | 1~65535 | ‘0……0’ | 數字文本欄位(數字型字串)有前導0 |
| T | 6 | 6 | ‘000000’ | (樣式:HHMMSS) |
| 十六進制型別 | ||||
| X | 1 | 1~65535 | X’0……0’ | 十六進制欄位 |
系統變數sy-datum(系統)和sy-datlo(本地)的區別(37)
- 系統基本資訊自動會保存到SYST結構體中,用戶本地profile資訊TIMEZONE會保存到系統變數SY-ZONLO中,
String相關命令(39)
①FIND
- ABAP欄位中存在欄位B時,SY-SUBRC回傳值為0
gv_str = 'ABAP'.
gv_chr = 'B'.
FIND gv_chr IN gv_str.
IF SY-SUBRC EQ 0.
WRITE 'B found'.
ENDIF.
結果:B found
②REPLACE
將ABAP變換成BBAP
gv_str = 'ABAP'.
gv_chr = 'BBAP'.
REPLACE 'ABAP' IN gv_str WITH gv_chr.
WRITE / gv_str.
結果:BBAP
③TRANSLATE
- 大小寫字母轉換LOWER CASE / UPPER CASE,ABAP→abap / abap→ABAP
gv_str = 'ABAP'.
TRANSLATE gv_str TO LOWER CASE.
WRITE / gv_str.
結果:abap
④SHIFT
- ABAP依次向左移動
gv_str = 'ABAP'.
SHIFT gv_str.
WRITE / gv_str.
結果: BAP
⑤CONDENSE
- 去空格并向左對齊,經常與NO-GAPS一起使用去掉空格
gv_str = 'AB AP'.
CONDENSE gv_str NO-GAPS.
WRITE / gv_str.
結果:ABAP
⑥OVERLAY
- 填充Character的空格,但不覆寫原來字符
gv_str = ' B P'.
gv_chr = 'AAAA'.
OVERLAY gv_str WITH gv_chr.
WRITE / gv_str.
結果:ABAP
⑦CONCATENATE
- AB+AP連接成ABAP
gv_str = 'AB'.
gv_chr = 'AP'.
CONCATENATE gv_str gv_chr INTO gv_str.
WRITE / gv_str.
結果:ABAP
⑧SPLIT
- 以字符C為中心分為AB與AP
GS_STR = 'ABCAP'.
SPLIT gv_str AT 'C' INTO gv_str gv_chr.
WRITE / gv_str gv_chr.
結果:AB AP
單引號“ ’ ”與grave“ ` ”的區別(39)
DATA gv_char(32) TYPE c.
gv_char = 'This is a'.
CONCATENATE gv_char 'text ' INTO gv_char SEPARATED BY space.
* 結果 => ''This is a text''
CONCATENATE gv_char `text ` INTO gv_char SEPARATED BY space.
* 結果 => ''This is a text ''
- 若使用grave(`),則能夠識別字串中包含的所有空格,
- SEPARATED BY space 加空格
資料字典型別與ABAP基本資料型別
- 程式中經常使用的ABAP資料字典型別(52)
面試很難
| ABAP資料字典型別 | ABAP基本資料型別 |
|---|---|
| ACCP | N(6) |
| CHAR n | C(n) |
| CLNT | C(3) |
| CUKY | C(5) |
| CURR n,m | P((n+1)/2 DECIMAL m |
| DEC n,m | P((n+1)/2 DECIMAL m |
| DATS | D(8) |
| FLTP | F(8) |
| INT1 | X(1) |
| INT2 | X(2) |
| INT4 | X(4) |
| LANG | C(1) |
| NUMC n | N(n) |
| PREC | X(2) |
| QUAN n,m | P((n+1)/2 DECIMAL m |
| RAW n | X(n) |
| TIMS | T(6) |
| UNIT | C(n) |
| VARC n | C(n) |
| LRAW | X(n) |
| LCHR | C(n) |
| STRING | STRING |
2.5 賦值
2.5.1 給變數賦值(52)
- 定義變數時可以通過 VALUE 陳述句賦初始值,實際處理資料的程式中使用 MOVE 或 WRITE TO 陳述句給變數賦值,
gv_char1 = gv_char.
MOVE gv_char TO gv_char1.
MOVE-CORRESPONDING gs_string TO gs_string1.
WRITE gv_char TO gv_char1(I).
- MOVE TO 陳述句與 gv_char1 = gv_char. 中的 Equal(=) 陳述句相同,賦值字串欄位值時可以使用 MOVE-CORRESPONDING 陳述句,這時 gs_string 和 gs_string1 的欄位名可以不相同,
- MOVE-CORRESPONDING 陳述句還經常用于不同結構體之間賦值,其特點是找到名字相同的欄位名進行賦值,當欄位名及順序不同的結構體之間相互賦值時,如果用 MOVE 陳述句,則會按順序進行賦值,因此要使用 MOVE-CORRESPONDING 陳述句, MOVE 陳述句還可以用于型別轉換(Type Conversions),即 gs_string 的資料型別會轉換成 gs_string1 型別,
- 在ABAP語言中除了型別 D(Date) 與型別 T(Time) 外都可以互相轉換型別,一共有64種形態的型別可以相互轉換,
- WRITE 陳述句主要有兩種用法,一種是輸出報表(Output to a list),另一種是變數賦值(Output to a field or internal Table),變數賦值時一般用 WRITE TO 陳述句,將資料物件 gv_char 的值轉換成型別C后賦給 gv_char1 ,前提是 gv_char 型別可以轉換成C型別的欄位,否則會發生
Syntax或者runtime error的錯誤,后面 (I) 里可以使用除了 UNDER 和 NO-GAP 以外的所有編輯格式選項,關于 (I) 具體引數可以在 HELP 中查詢,(摁F1) - 下面是關于 MOVE-CORRESPONDING 陳述句的代碼,其中結構體 GS_REN 和 GS_INFO 由不同欄位構成,將結構體 GS_REN 賦值給結構體 GS_INFO 時,需要多次使用 MOVE 陳述句才能實作,但是如果使用 MOVE-CORRESPONDING 陳述句,則使用一次即可實作,
DATA: BEGIN OF gs_ren,
name(20) VALUE 'Kim Sung Joon',
country(10) VALUE 'China',
city(20) VALUE 'Beijing',
END OF gs_ren,
BEGIN OF gs_info,
name(20),
city(20),
phone(10) VALUE '1521001234',
END OF gs_info.
MOVE-CORRESPONDING gs_ren TO gs_info.
WRITE: / gs_info-name,
gs_info-city,
gs_info-phone.
結果:
Kim Sung Joon Beijing 1521001234
第3章 OPEN SQL 與 NATIVE SQL
3.1 概要
3.1.4 OPEN SQL 與 NATIVE SQL
1. OPEN SQL
- OPEN SQL 是由創建資料庫資料的 ABAP 命令構成的,在不同的 DBMS(資料庫管理系統)環境下其語法相同, OPEN SQL 不能使用 DDL、DCL,只能使用類似于 SELECT 陳述句的 DML 語言,另外,還可以使用本地緩沖器,并且比 NATIVE SQL 的使用方法簡單,ABAP 程式有激活時自動執行 Syntax Check 的特點,
2. NATIVE SQL
- NATIVE SQL 語言可以直接連接到資料庫使用 DML、DDL 語言,
3.1.6 OPEN SQL 概要
OPEN SQL 命令陳述句(62)
| 關鍵字 | 功能 |
|---|---|
| SELECT | 從資料庫表中讀取資料 |
| INSERT | 往資料庫表中追加資料 |
| UPDATE | 修改資料庫表的資料 |
| MODIFY | 執行INSERT + UPDATE 功能 UPDATE:資料庫表中已存在此資料時(以 key 值區分是否存在) INSERT:資料庫表中不存在此資料時(以 key 值區分是否存在) |
| DELETE | 洗掉資料庫表資料 |
3.2 OPEN SQL ——讀取資料
讀取資料的命令(62)
| 陳述句 | 功能 |
|---|---|
| SELECT < result > | SELECT 陳述句可以羅列資料庫表欄位,讀取一件或多件資料 |
| INTO < target > | INTO 陳述句用來指定查詢出來的資料存盤地即變數,然后在程式中使用此變數 |
| FROM < source > | FROM 陳述句用來指定要查詢的資料庫表,可以寫在 INTO 陳述句前后 |
| WHERE < cond > | 可以限制要查詢資料的條件 |
| GROUP BY < fidleds > | 用于分組查詢資料,例如,分組求合計時經常使用 GROUP BY陳述句 |
| HAVING < cond > | HAVING 是用于限制 GROUP BY 條件的陳述句,類似于 SELECT 的 WHERE 陳述句 |
| ORDER BY < fidleds > | 用于排序(sort)查詢的資料 |
3.2.1 SELECT 陳述句
- SELECT 陳述句
2. 一條資料(63)
- 從資料庫中取得一條資料時使用 SINGLE 陳述句,使用此陳述句只會取得一條資料,因此要正確給出要查詢資料的條件,即在 WHERE 條件里追加所有 key 值,當沒有指出所有 key 值時,會回傳多條中的任意一條,會導致讀取的資料與預期結果不同,讀取資料庫表所有欄位時使用 *,
- 如果系統找到一個完全符合指定條件的行, SY-SUBRC 回傳0,否則回傳4,
SELECT SINGLE MATNR INTO LV_MATNR/GS_DATA-MATNR FROM WHERE VBELN = LV_VBELN/GS_DATA-VBELN.
3. Several Line(63)
- 當取得多條資料時 SELECT 結果會保存到內部定義的表中,這種表在ABAP語言里稱為內表(Internal Table), DISTINCT 陳述句用于洗掉重復值,
SELECT [DISTINCT] MATNR WHERE
4. AS(別名)(64)
- 利用 AS 陳述句可以給欄位指定別名,
SELECT MATNR AS MATNR1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/303026.html
標籤:其他
