ABAP中的 Sql编辑
关键字:ABAP sql
SQL语法
我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,.读取数据最常用的方法就是通过SQL语法实现的.
ABAP/4中可以利用SQL语法创建或读取TABLE,SQL语法分为DDL(DATA DEFINE LANGUAGE)语言和DML(DATA MULTIPULATION LANGUAGE)语言,DDL语言是指数据定义语言,例如CREATE等, DML语言是数据操作语言,例如SELECT, INSERT等语句. SQL 语句有OPEN SQL语句和NATIVE SQL语句. OPEN SQL语句不是标准SQL语句,是ABAP/4语言,利用OPEN SQL语句能在Databases 和 Command 之间产生一个BUFFER,所以它有一个语言转换的过程.而NATIVE SQL语句则是标准的SQL语句, 它直接针对Databases操作.
一、OPEN SQL
OPEN SQL 语句包含有: SELECT,INSERT,UPDATE,MODIFY,DELETE,OPEN CURSOR, FETCH,CLOSE CURSOR,COMMIT WORK,ROLLBACK WORK等.
1. SELECT语句
语法格式:
SELECT
[GROUP BY
其中:
相关的系统变量:
SY-SUBRC = 0 表示读取数据成功
<> 0 表示未找到符合条件的记录
SY-DBLNT: 被处理过的记录的笔数.
相关的命令:
EXIT. 退出循环.
CHECK
始下一次循环..
利用循环方式读取所有记录
SELECT ….ENDSELECT.是循环方式读取记录的.
例如:
TABLES MARD.
SELECT [DISTINCT] * FROM MARD WHERE MA TNR = ‘3520421700’.
ENDSELECT.
(从MARD中抓取所有料号=3520421700的资料)
◆读取一笔资料
TABLES MARD.
SELECT SINGLE * FROM MARD WHERE MA TNR = ‘3520421700’.
(从MARA中抓取一笔料号=3520421700的资料)
将读取的记录放在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.
DA TA: BEGIN OF ITAB OCCURS 10,
MA TNR LIKE MARD-MA TNR,
WERKS LIKE MARD-WERKS,
LGORT LIKE MARD-LGORT,
LABST LIKE MARD-LABST,
END OF ITAB.
SELECT MA TNR WERKS LGORT LABST
INTO CORRESPONDING FIELDS OF ITAB
FROM MARD
WHERE MA TNR = ‘3520421700’.
APPEND ITAB.
CLEAR ITAB.
ENDSELECT.
(将读取的结果放在Internal table ITAB中)
举例二.
TABLES MARD.
SELECT MA TNR MTART MAKTX INTO (t_matnr, t_mtart, maktx)
FROM MARD
WHERE MA TNR = ‘3520421700’.
ENDSELECT.
(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。
◆按指定的字段排序
TABLES SBOOK.
SELECT * FROM SBOOK WHERE CARRID = ‘LH’AND
CONNID = ‘0400’AND
FLDA TE = ‘19950228’
ORDER BY BOOKID [ASCENDING/DESCENDING].
WRITE: / SBOOK-BOOKID, SBOOK-CUSTOMID,
SBOOK-CUSTTYPE, SBOOK-SMOKER,
SBOOK-LUGGWEIGHT, SBOOK-WUNIT,
SBOOK-INVOICE.
ENDSELECT.
(利用参数ORDER BY所指定的字段排序)
抓取数据的条件叙述
BETWEEN
例如: WHERE YEAR BETWEEN 1995 AND 2000.
LIKE
例如: WHERE NAME LIKE ‘MIKE%’.
(‘%’是通配符号)
IN (
是
例如: WHERE PLANT IN (‘CHUNGLI’, ‘TAOYUAN’,’LIUTU’).
(表示PLANT 只要是’CHUNGLI’或’TAOYUAN’或’LIUTU’都可以).
2. INSERT 语句
从work area 加入到Internal Table中
格式: INSERT INTO
例如:
DA TA: BEGIN OF W A,
CODE(6) TYPE C,
NAME(30) TYPE C,
END OF W A.
DA TA: VEN LIKE WA OCCURS 10.
…
WA-CODE = ‘530120’.
WA-NAME = ‘XINGDA ELECTRONICS CO.,LTD’.
INSERT INTO VEN V ALUES WA .
如果work area的名称就是internal table的名称,可以直接写成:
INSERT
例如:
DA TA: BEGIN OF WA OCCURS 10,
CODE(6) TYPE C,
NAME(30) TYPE C,
END OF W A.
…
WA-CODE = ‘530120’.
WA-NAME = ‘XINGDA ELECTRONICS CO., LTD’.
INSERT W A.
从另外一个Internal table中INSERT 资料
格式:
INSERT
将
3.MODIFY 语法
MODIFY
4.DELETE 语法
DELETE
或: DELETE
5.DATABASE CURSOR
Database Cursor是一个数据库暂存区, 将经SELECT指令读取的记录存放至此暂存区, 再由此暂存区放至Work Area中, 可减少数据库读取的次数.
1.开启Database Cursor
语法:
OPEN CURSOR
Example:
TABLES SPFLI.
DA TA: W A LIKE SPFLI,
C1 TYPE CURSOR.
OPEN CURSOR C1 FOR SELECT * FROM SPFLI
WHERE AREA =’TAIWAN’.
2.读取Database Cursor的资料存入Work Area
语法:
FETCH NEXT CURSOR
Example:
FETCH NEXT CURSOR C1 INTO W A.
读取下一笔Cursor位置的数据存入W A, 如果已无资料可读, SY-SUBRC <>0.
关闭Database Cursor
语法:
CLOSE CURSOR
Example:
CLOSE CURSOR C1.
https://www.doczj.com/doc/b8497141.html,MIT WORK & ROLLBACK WORK
要确定资料成功写入数据库,可使用COMMIT WORK指令,如:
COMMIT WORK.
相反的, 如果反悔要复原, 可使用ROLLBACK WORK, 可复原在上个COMMIT WORK指令之后的数据, 如:
ROLLBACK WORK.
§使用NATIVE SQL指令
语法格式:
EXEC SQL [PERFORMING