直接在ABAP程序中写的SQL叫做OPEN SQL,它与标准SQL语法极为相似,除此之外,SAP还提供了Native SQL,可直接使用Native SQL进行数据的增删改查。
首先需要通过SM59进行数据库连接的配置,配置过程不在讨论,请参考其它网文。
下面我们简单介绍一下Native SQL的操作代码,包括:1、连接数据库;2、插入数据;3、查询数据;4、删除数据;5、断开数据库连接。
1、连接数据库。
lv_dbcon = 'JJSHARE'. "读写权限(SM59配置好的连接名称,为控制SAP权限,可在数据库端配置多个用户,有可读写的用户,有只读用户,在做SM59配置时按用户名做多个连接达到权限管控目的)
EXEC SQL.
CONNECT TO :lv_dbcon
ENDEXEC.
IF sy-subrc EQ 0.
EXEC SQL.
SET CONNECTION :lv_dbcon
ENDEXEC.
ENDIF.
2、插入数据。
EXEC SQL.
INSERT INTO sjgx.SJGX_CWQGC_MILEPOST_DET (ID,SYS,PLAN_ID,PROJECT_NO,ITEM_LIBRARY_ID,ITEM_CODE,ITEM_NAME,ACTUAL_COMPLETE_DATE,CREATE_TIME,ZDATE)
VALUES (:LW_DATA-ID,:LW_DATA-SYS,:LW_DATA-PLAN_ID,:LW_DATA-PROJECT_NO,:LW_DATA-ITEM_LIBRARY_ID,:LW_DATA-ITEM_CODE,
:LW_DATA-ITEM_NAME,:LW_DATA-ACTUAL_COMPLETE_DATE,:LW_DATA-CREATE_TIME,:LW_DATA-ZDATE)
ENDEXEC.
EXEC SQL.
COMMIT
ENDEXEC.
:LW_DATA-ID代表变量,注意最后一个变量没有用逗号分隔。在EXEC SQL内的SQL语句不能有句号。
3、查询数据
EXEC SQL PERFORMING frm_append_data.
SELECT ID,
SYS,
PLAN_ID,
PROJECT_NO,
ITEM_LIBRARY_ID,
ITEM_CODE,
ITEM_NAME,
TO_CHAR( ACTUAL_COMPLETE_DATE, 'yyyymmdd') as ACTUAL_COMPLETE_DATE
CREATE_TIME,
TO_CHAR( ZDATE, 'yyyymmddhhmiss' ) AS ZDATE --日期类型
INTO :LW_DATA_DIS
FROM SJGX.SJGX_CWQGC_MILEPOST_DET
WHERE SYS = 'S02'
AND ZDATE >= to_date(:GV_TIMESTAMP_PW,'yyyy-mm-dd hh24:mi:ss') --日期类型
ENDEXEC.
FORM frm_append_data.
APPEND lw_data_dis TO lt_data_dis.
ENDFORM. "FRM_APPEND_DATA
这里日期格式与SAP的不同,需要使用数据库自己的转换函数(示例是ORACLE的),通过FORM frm_append_data把一行数据放到内表中,建议使用此方式,不推荐直接放到变量里。
SJGX.是ORALCE表空间。
4、删除数据
EXEC SQL.
DELETE FROM SJGX.SJGX_CWQGC_MILEPOST_DET WHERE ID = :P_ID
ENDEXEC.
EXEC SQL.
COMMIT
ENDEXEC.
5、断开连接
每次使用完后应当断开与DB的连接。
EXEC SQL.
DISCONNECT :lv_dbcon
ENDEXEC.