NATIVE SQL
1.1 基本语句是以EXEC SQL开头、以ENDEXEC结束 。使用变量时要在变量名前加冒号:,另外NATIVE SQL中一定要追加区分客户的MANDT字段。
ABAP常用系统变量(SY-)
DATA : gv_carrid LIKE sflight-carrid VALUE 'AA',
gv_connid LIKE sflight-connid.
EXEC SQL.
SELECT A.CONNID
INTO :GV_CONNID "这个冒号后面要紧挨着变量
FROM SFLIGHT A
WHERE A.MANDT = :SY-MANDT "这个冒号前面和等于号之间要有空格。
AND A.CARRID = :GV_CARRID
ENDEXEC.
WRITE gv_connid.
1.2 NATIVE SQL与内表
使用PERFORMING语句一次性往内表插入多条数据,当每次执行SELECT语句读取一条数据时,PERFORMING语句都会执行Subroutine.
TYPES : BEGIN OF t_str,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
END OF t_str.
DATA gt_itab TYPE TABLE OF t_str.
DATA gs_wa TYPE t_str.
DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.
EXEC SQL PERFORMING APPEND_ITAB.
SELECT A.CARRID , A.CONNID
INTO :GS_WA-CARRID, :GS_WA-CONNID
*INTO语句中虽然单独指定了某些字段,但是也可以使用工作区一次性保存所有值。
*INTO :GS_WA
FROM SFLIGHT A
WHERE A.MANDT = :SY-MANDT
AND A.CARRID = :GV_CARRID
ENDEXEC.
FORM append_itab.
WRITE : / gs_wa-carrid,gs_wa-connid.
APPEND gs_wa TO gt_itab.
CLEAR gt_itab.
ENDFORM.
1.3 NATIVE SQL与表连接。
NATIVE SQL中也可以连接多个表读取所需的数据。
TYPES : BEGIN OF t_str,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
carrname LIKE scarr-carrname,
END OF t_str.
DATA gs_wa TYPE t_str.
DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.
EXEC SQL PERFORMING WRITE_DATA.
SELECT A.CARRID , B.CARRNAME
INTO :GS_WA-CARRID, :GS_WA-CARRNAME
FROM SFLIGHT A, SCARR B
WHERE A.MANDT = B.MANDT
AND A.CARRID = B.CARRID
AND A.MANDT = :SY-MANDT
AND A.CARRID = :GV_CARRID
ENDEXEC.
FORM write_data.
WRITE : / gs_wa-carrid,gs_wa-carrname.
ULINE.
ENDFORM.
为了看清EXEC SQL PERFORMING WRITE_DATA.执行步骤,我们在FROM里加了ULIKE,debug如下图。
最终执行结果如下图。可以看出一条一条执行,每一次都会调用WRITE_DATA输出相应的数据。
1.4 NATIVE SQL与子字字符串。
1、substr函数格式 (俗称:字符截取函数)
格式1: substr(string string, int a, int b);SUBSTR(变量,开始位,长度)
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
格式2:substr(string string, int a) ;
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。
TYPES : BEGIN OF t_str,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
carrname LIKE scarr-carrname,
END OF t_str.
DATA gs_wa TYPE t_str.
DATA gv_carrid LIKE sflight-carrid VALUE 'AA'.
EXEC SQL PERFORMING WRITE_DATA.
SELECT A.CARRID , SUBSTR(B.CARRNAME,2,6)
INTO :GS_WA-CARRID, :GS_WA-CARRNAME
FROM SFLIGHT A, SCARR B
WHERE A.MANDT = B.MANDT
AND A.CARRID = B.CARRID
AND A.MANDT = :SY-MANDT
AND A.CARRID = :GV_CARRID
ENDEXEC.
FORM write_data.
WRITE : / gs_wa-carrid,gs_wa-carrname.
ULINE.
ENDFORM.
1.5 NATIVE SQL与DB LINK。
DB LINK就是指数据连接
,语句 数据库表名@数据库连接名
远程SAP系统之间连接经常使用RFC实现的方法,使用NATIVE SQL可以直接读取远程数据库中的数据。下面将远程数据库连接名命名为SERVER2,然后在远程数据库表MARA中读取数据的语句。
SAP与外部数据连接步骤
EXEC SQL
SELECT matnr
FROM MARA@SERVER2
ENDEXEC.
DB LINK 设置要向BC(Basis Consultant)申请,然后用下列语句连接Oracle.
CREATE[public|private]DATABASE LIKE(名字)
CONNECT TO (账号) IDENTIFIED BY(密码)using '(连接字符串)';
事务码/oDBACOCKPIT 建立数据库连接
注:测试连接如果出错,可以用ADBC_TEST_CONNECTION 测试,ADBC_TEST_CONNECTION 测试后有个图标可以点进trace文件,拉到最后,就是出错的具体信息。
连接成功后可以用ADBC_QUERY查询表结构和数据
1.6 执行NATIVE SQL的工具。事务码ST04
输入SQL语句点击执行。
可以得到查询结果如下: