條件輸入完後要將符合條件的資料篩選出來, 可配合使用 SELECT 指令 1.使用WHERE <條件式> Example: TABLES SPFLI. SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI WHERE CONNID IN AIRLINE. WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO. ENDSELECT. 2.使用CHECK參數 Example: TABLES SPFLI. SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI. CHECK AIRLINE. WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO. ENDSELECT. * exp: TABLES SPFLI. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID, S_CITYFR FOR SPFLI-CITYFROM, S_CITYTO FOR SPFLI-CITYTO, S_CONNID FOR SPFLI-CONNID. SELECT * FROM SPFLI. CHECK: SPFLI-CARRID IN S_CARRID, SPFLI-CITYFR IN S_CITYFR, SPFLI-CITYTO IN S_CITYTO, SPFLI-CONNID IN S_CONNID. WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO. ENDSELECT.
3.使用 IF … IN 敘述 Example: SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID. SELECT * FROM SPFLI. IF SPFLI-CONNID IN AIRLINE. WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO. ENDIF. ENDSELECT. *-------------------------------------------------------------------------------------*
SELECTION-SCREEN 1.產生空白列 語法: SELECTION-SCREEN SKIP [] Example: SELECTION-SCREEN SKIP 2. 產生兩列空白列 2.產生底線 語法: SELECTION-SCREEN ULINE / (length) Example: SELECTION-SCREEN ULINE /10(30). 自第10格開始產生長度30的底線 3.印出備註說明 語法: SELECTION-SCREEN COMMENT / (length) Example: REMARK = 'Pls enter your name'. SELECTION-SCREEN COMMENT /10(30) REMARK. 4. 同一列中輸入數個資料項 語法: SELECTION-SCREEN BEGIN OF LINE. …… SELECTION-SCREEN END OF LINE. Example: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN POSITION 20. PARAMETERS NAME(10). SELECTION-SCREEN POSITION 40. PARAMETERS BIRTH TYPE D. SELECTION-SCREEN END OF LINE. 在20格輸入NAME內容, 40格輸入 BIRTH的內容
5. 繪出BLOCK PANEL 語法: SELECTION-SCREEN BEGIN OF BLOCK [WITH FRAME [TITLE ……. SELECTION-SCREEN END OF BLOCK . Example: SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME . PARAMETER R1 RADIOBUTTON GROUP GR1. PARAMETER R2 RADIOBUTTON GROUP GR1. PARAMETER R3 RADIOBUTTON GROUP GR1. SELECTION-SCREEN END OF BLOCK RADIO. *-------------------------------------------------------------------------------------*
利用循環方式讀取所有記錄 SELECT ….ENDSELECT.是循環方式讀取記錄的. 例如: TABLES MARD. SELECT [DISTINCT] * FROM MARD WHERE MATNR = '3520421700'. . ENDSELECT. (從MARD中抓取所有料號=3520421700的資料) ◆讀取一筆資料 Example: TABLES SPFLI. SELECT SINGLE * FROM SPFLI WHERE PLANT ='CHUNGLI' AND TEL='4526174'. WRITE: / SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL. ◆將讀取的記錄放在work area中,并且加入Internal table 中. 格式有: ... INTO ... INTO CORRESPONDING FIELDS OF ... INTO (f1, ..., fn) 變量組. ... INTO TABLE ... INTO CORRESPONDING FIELDS OF TABLE ... APPENDING TABLE ... APPENDING CORRESPONDING FIELDS OF TABLE 舉例一: TABLES MARD. DATA: BEGIN OF ITAB OCCURS 10, MATNR LIKE MARD-MATNR, WERKS LIKE MARD-WERKS, LGORT LIKE MARD-LGORT, LABST LIKE MARD-LABST, END OF ITAB. SELECT MATNR WERKS LGORT LABST INTO CORRESPONDING FIELDS OF ITAB FROM MARD WHERE MATNR = '3520421700'. APPEND ITAB. CLEAR ITAB. ENDSELECT. (將讀取的結果放在Internal table ITAB中)
DATA: BEGIN OF WA, LINE(240), END OF WA. DATA NAME(10). NAME = 'SPFLI'. SELECT * FROM (NAME) INTO WA. WRITE: / WA-LINE. ENDSELECT. 数据库表名 称 SPFLI 被赋给字符 字段 NAME。 SELECT 语句将所有 的行从 SPFLI 中读到目标 区 WA 中。在该示 例中,WA 与 SPFLI 的结构并不 相同,每一 行都将自动 地转换成字 符字段.
舉例二. TABLES MARD. SELECT MATNR MTART MAKTX INTO (t_matnr, t_mtart, maktx) FROM MARD WHERE MATNR = '3520421700'. . ENDSELECT. (從MARD中抓取料號=3520421700的料號、類型和描述,放在變量t_matnr, t_mtart, maktx中)。
Example: TABLES SPFLI. DATA WA LIKE TABLES. SELECT * FROM SPFLI INTO WA. WRITE: / WA-COMPANY,WA-PLANT. ENDSELECT. 逐筆寫入WA 工作區中 舉例三. 將讀取的資料寫入 Initial Table 中 語法: SELECT .. INTO TABLE Example: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB. 一次讀10筆(Initial Table的長度)記錄存入 ITAB 中
SELECT .. INTO TABLE PACKAGE SIZE 一次讀取 筆記錄至 中 Example: TABLES SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE. SELECT * FROM SPFLI INTO ITAB PACKAGE SIZE 5. 一次讀取 5 筆記錄
exp :
TABLES SPFLI. DATA: BEGIN OF WA, NUMBER TYPE I VALUE 1, CITYFROM LIKE SPFLI-CITYFROM, CITYTO LIKE SPFLI-CITYTO, END OF WA. SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF WA. WRITE: / WA-NUMBER, WA-CITYFROM, WA-CITYTO. ENDSELECT. 输出如下所 示:
在该示例中 ,系统只将 数据库表 SPFLI 中选定行的 列 CITYFROM 和 CITYTO 传送到 WA 中。WA 中的组件 NUMBER 保持不变。 *-------------------------------------------------------------------------------------*
按指定的欄位排序 TABLES SBOOK. SELECT * FROM SBOOK WHERE CARRID = 'LH' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY BOOKID ASCENDING. WRITE: / SBOOK-BOOKID, SBOOK-CUSTOMID, SBOOK-CUSTTYPE, SBOOK-SMOKER, SBOOK-LUGGWEIGHT, SBOOK-WUNIT, SBOOK-INVOICE. ENDSELECT. (利用參數ORDER BY所指定的欄位排序) *-------------------------------------------------------------------------------------*
◆ 抓取數据的條件敘述 (1) BETWEEN AND 例如: WHERE YEAR BETWEEN 1995 AND 2000. (2) LIKE 例如: WHERE NAME LIKE 'MIKE%'. ('%'是通配符號) (3) IN (…) 是…里面的任意一個值即可. 例如: WHERE PLANT IN ('CHUNGLI', 'TAOYUAN','LIUTU'). (表示PLANT 只要是'CHUNGLI'或'TAOYUAN'或'LIUTU'都可以). (4) ORDER BY 敘述 指定排序的欄位或順序 (1). ..ORDER BY PRIMARY KEY. 根據 PRIMARY KEY 遞增排序 (2)…ORDER BY [DESCENDING] [DESCENDING] Example: SELECT * FROM IM ORDER BY PART . *-------------------------------------------------------------------------------------*
INSERT 語句 ◆從work area 加入到Internal Table中 格式: INSERT INTO VALUES 例如: DATA: BEGIN OF WA, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA. DATA: VEN LIKE WA OCCURS 10. … WA-CODE = '530120'. WA-NAME = 'XINGDA ELECTRONICS CO.,LTD'. INSERT INTO VEN VALUES WA . 如果work area的名稱就是internal table的名稱,可以直接寫成: INSERT 例如: DATA: BEGIN OF WA OCCURS 10, CODE(6) TYPE C, NAME(30) TYPE C, END OF WA. … WA-CODE = '530120'. WA-NAME = 'XINGDA ELECTRONICS CO., LTD'. INSERT WA. ◆從另外一個Internal table中INSERT 資料 格式: INSERT FROM TABLE [ACCEPTING DUPLICATE KEY] 將中非NULL的資料加入中,加上[ACCEPTING DUPLICATE KEY]能限制相同PRIMARY KEY不重复加入.
加入一筆記錄至資料庫
1.自 Work Area 工作區 語法: INSERT INTO VALUES Example: TABLES SPFLI. DATA WA LIKE SPFLI. WA-NO = '34051920'. WA-COMPANY='DELTA'. INSERT SPFLI VALUES WA. 將 ITAB 資料加入 SPFLI中, 也可寫成 INSERT SPFLI FROM ITAB.
SPFLI-NO='34299876'. SPFLI-COMPANY='HP'. INSERT SPFLI FROM SPFLI. 將Work Area SPFLI中的資料加入資料庫檔案 SPFLI中 因Work Area SPFLI的結構與資料檔 SPFLI一樣, 所以也可 寫成 INSERT SPFLI.