项目需求:SAP系统直接连接中间库数据库,定时的获取中间库的数据,中间库是ORACLE数据库。
1)查询出(外部)ORACLE表里所有数据放入内表
2)把内表里面的数据插入到SAP表
3)把(SAP)内表里的数据插入到(外部)ORACLE数据库
4)删除(外部)ORACLE数据库表数据
1、配置连接数据库
事务代码DBCO,编辑-新建条目
DB连接:输入连接的名称
DBMS:Oracel选择ORA
用户名:输入用户名
数据库口令:两次输入数据库密码
连接信息: "10.10.1.20:1521/XXX"
输入IP和端口 XXX为ORACLE-SID
永久:勾上
2、测试是否联通
事务代码SE38 程序名 ADBC_TEST_CONNECTION
输入连接名称运行
可以用 ADBC_QUERY 查询表结构和数
3、代码:连接外部数据库
代码语言:javascript复制DATA :V_EXC_REF TYPE REF TO CX_SY_NATIVE_SQL_ERROR,
V_ERRTXT TYPE STRING,
V_SQLERR_REF TYPE REF TO CX_SQL_EXCEPTION.
TRY.
" 连接
EXEC SQL.
CONNECT TO :连接名称
ENDEXEC.
CATCH CX_SY_NATIVE_SQL_ERROR INTO V_EXC_REF.
V_ERRTXT = V_EXC_REF->GET_TEXT( ).
CATCH CX_SQL_EXCEPTION INTO V_SQLERR_REF.
IF V_SQLERR_REF->DB_ERROR = 'X'.
V_ERRTXT = V_SQLERR_REF->SQL_MESSAGE.
ELSE.
V_ERRTXT = V_SQLERR_REF->INTERNAL_ERROR.
ENDIF.
ENDTRY.
IF V_ERRTXT IS NOT INITIAL.
E_STATUS = 'E'.
E_MESSAGE = V_ERRTXT.
ELSE.
E_STATUS = 'S'.
E_MESSAGE = '连接成功!'.
ENDIF.
4、代码:查询数据,查询多条数据到内表
代码语言:javascript复制FORM frm_select_db_all .
TRY.
EXEC SQL PERFORMING frm_append_data.
SELECT NAME,
WORKORDER,
PRODUCTNAME,
ID,
QUANTITY,
SOURCEPRODUCTNAME,
SOURCEPRODUCTQUANTITY,
COMPONENTID,
VENDORLOTID,
VENDORNAME,
ISSUEDATE,
ISSUETIME,
USERID,
UPDATETIMES,
TXNTIMES
INTO :LS_SOURSE
FROM SAP.SOURSE
ENDEXEC.
ENDTRY.
ENDFORM.
FORM frm_append_data .
APPEND LS_SOURSE TO LT_SOURSE.
CLEAR LS_SOURSE.
ENDFORM.
5、代码:删除外部数据库表数据
代码语言:javascript复制FORM frm_delete_db .
TRY.
EXEC SQL.
DELETE RSC.USERD
ENDEXEC.
IF sy-subrc = 0.
EXEC SQL.
COMMIT
ENDEXEC.
ELSE.
EXEC SQL.
ROLLBACK
ENDEXEC.
ENDIF.
CATCH cx_sy_native_sql_error INTO v_exc_ref.
v_errtxt = v_exc_ref->get_text( ).
CATCH cx_sql_exception INTO v_sqlerr_ref.
IF v_sqlerr_ref->db_error = 'X'.
v_errtxt = v_sqlerr_ref->sql_message.
ELSE.
v_errtxt = v_sqlerr_ref->internal_error.
ENDIF.
ENDTRY.
ENDFORM.
6、代码:插入多条数据到外部数据库
代码语言:javascript复制FORM frm_insert_db .
TRY.
LOOP AT gt_userd INTO DATA(gs_userd).
EXEC SQL.
INSERT INTO RSC.USERD
(FA,
STROE,
STROE_DSC,
MATERIAL,
MATERIAL_NO,
STROE_N,
UNIT,
UNIT_DSC
) VALUES
(:GS_USERD-FA,
:GS_USERD-STROE,
:GS_USERD-STROE_DSC,
:GS_USERD-MATERIAL,
:GS_USERD-MATERIAL_NO,
:GS_USERD-STROE_N,
:GS_USERD-UNIT,
:GS_USERD-UNIT_DSC
)
ENDEXEC.
IF sy-subrc = 0.
EXEC SQL.
COMMIT
ENDEXEC.
ELSE.
EXEC SQL.
ROLLBACK
ENDEXEC.
ENDIF.
ENDLOOP.
ENDTRY.
ENDFORM.