同创建内表数据类型(页 99)中所示,该示例创建数据类型 ITAB 作为内表。通过使用 DATA 语句的 TYPE 参数引用 ITAB,使数据对象 TAB1 与 ITAB 结构相同。通过使用 DATA 语句的 LIKE 参数引用 TAB1,使数据对象 TAB2 结构相同。创建的 TAB2 带表头行。因此,可以在程序中使用 TAB2-COLUMN1、TAB2-COLUMN2 和 TAB2-COLUMN3 等定位表格工作区域 TAB2。
exp :
DATA FLIGHT_TAB LIKE SFLIGHT OCCURS 10.
本示例创建数据对象 FLIGHT_TAB, 其结构与数据库表格 SFLIGHT 相同。
本示例介绍 如何采用两种不同的步骤创建同一内表。
TYPES VECTOR_TYPE TYPE I OCCURS 10.
DATA VECTOR TYPE VECTOR_TYPE WITH HEADER LINE.
在此创建一个内表数据类型 VECTOR_TYPE,其行包含首先创建的基本类型 I 字段。然后,通过引用 VECTOR_TYPE 创建数据对象 VECTOR。通过使用 WITH HEADER LINE 选项还创建表格工作区域 VECTOR。在这种情况下,表格工作区域包含一种类型 I 字段,可以通过名称 VECTOR 定位。
DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
在这种情况下,通过直接在 DATA 语句中使用 OCCURS 选项创建完全一样的数据类型 VECTOR。
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.
1.使用 Primary Key 语法: UPDATE FROM Example: TABLES SPFLI. DATA WA LIKE SPFLI. WA-NO='34051920'. WA-COMPANY='DELTA'. UPDATE SPFLI FROM WA. 如 SPFLI 的 Primary Key是 NO, 则会找到 NO='34051920'的记录, 将其 COMPANY栏位异动为 DELTA
2.使用条件式 语法: UPDATE SET < f1>=… WHERE 根据条件式异动符合条件式的记录 Example: UPDATE SPFLI SET NO ='34051920' COMPANY = 'DELTA' WHERE TEL = '4526107'. *-------------------------------------------------------------------------------------*
1.使用 Primary Key 语法: DELETE FROM Example: TABLES SPFLI. DATA WA LIKE SPFLI. WA-NO='34051920'. WA-COMPANY='DELTA'. DELETE SPFLI FROM WA. 如 SPFLI 的 Primary Key是 NO, 则会找到 NO='34051920'的记录, 找到后将此笔删除
2.使用条件式 语法: DELETE FROM WHERE 根据条件式删除符合条件式的记录 Example: DELETE FROM SPFLI WHERE AREA = 'AMERICAN'.
5. DATABASE CURSOR Database Cursor是一个资料库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可减少资料库读取的次数. 1.开启 Database Cursor 语法: OPEN CURSOR FOR SELECT … WHERE Example: TABLES SPFLI. DATA: WA LIKE SPFLI, C1 TYPE CURSOR. OPEN CURSOR C1 FOR SELECT * FROM SPFLI WHERE AREA ='TAIWAN'. 2.读取 Database Cursor的资料存入 Work Area 语法: FETCH NEXT CURSOR INTO Example: FETCH NEXT CURSOR C1 INTO WA. 读取下一笔Cursor位置的资料存入WA, 如果已无资料可读, SY-SUBRC <>0. 关闭 Database Cursor 语法: CLOSE CURSOR Example: CLOSE CURSOR C1.