转载
SAP 中可以通过配置数据库的链接,来完成从SAP链接到外部的数据库中进行处理数据,具体操作如下:
1、先进入事务:DBCO,设置数据库链接。进入该事务后,如果系统已经有配置过类似链接则会出现在如下画面中,如图:
2、在该配置中的难点在于您使用的服务器类型,sap中提供多种选择:
3、说其是难点,是因为不同的数据库类型,在‘链接信息’这栏填写的内容格式是不一样的,重点说明MSS和ORA(因为我只用到了这两种);
a)、SQL Server
这里的连接信息很接近 Sql Server 的连接字符串,但是参数名略有不同。指定主机IP、端口号、数据库名即可。
b)、Oracel
oracel的链接信息比较隐晦,必须在 SAP 应用服务器上安装 Oracel client ,然后设置链接,再在这里的链接信息进行指定。
4、设置完事务DBCO后,就可以进行编写代码测试链接是否成功。(注:任何数据库配置信息都存放在表DBCON中)
5、测试是否联通 ADBC_TEST_CONNECTION
如下代码测试:
1 data: g_errorstr(250) type c. 2 data g_conexion like dbcon-con_name value 'ZYUN'. "ZYUN即DBCO中配置的数据库链接名称 3 data: exec_ref type ref to cx_sy_native_sql_error, 4 error_text type string, 5 cl_sqlerr_ref type ref to cx_sql_exception. 6 perform sub_conndb using g_conexion. "调用模块,打开数据库链接 7 8 try. 9 exec sql . 10 ******根据OPEN SQL 编写SQL 语句 11 *例: 12 SELECT ANLN, 13 MCOA1, 14 BUKRS, 15 DZSX, 16 AUFNR1 17 INTO :gw_out-ANLN, 18 :gw_out-MCOA1, 19 :gw_out-BUKRS, 20 :gw_out-DZSX, 21 :gw_out-AUFNR1 22 FROM ZZTLD_BASE_FI_SALEORDER_004 23 WHERE ZTYPE is NULL 24 25 endexec. 26 27 catch cx_sy_native_sql_error into exec_ref. 28 29 g_errorstr = exec_ref->get_text( ). 30 concatenate '读取数据出错,' g_errorstr into g_errorstr. 31 32 write:/ g_errorstr. 33 catch cx_sql_exception into cl_sqlerr_ref. 34 35 36 if not g_errorstr is initial. 37 38 clear g_errorstr. 39 exec sql. 40 rollback 41 endexec. 42 else. 43 exec sql. 44 COMMIT 45 endexec. 46 endif. 47 48 endtry. 49 50 51 * 关闭连接 52 exec sql. 53 DISCONNECT :G_CONEXION 54 endexec. 55 56 57 58 59 *打开数据库链接模块编写 60 FORM sub_conndb USING conn LIKE dbcon-con_name. 61 CLEAR g_errorstr. 62 g_conexion = conn. 63 TRY. 64 "-- 连接SQL SERVER 65 EXEC SQL. 66 CONNECT TO :G_CONEXION 67 ENDEXEC. 68 CATCH cx_sy_native_sql_error INTO exec_ref. 69 CONCATENATE '无法连接至SQL数据库 连接名:' g_conexion INTO g_errorstr. 70 ENDTRY. 71 ENDFORM. 72 -----------------------------------
调用中间数据库
exec sql performing pf_get_zz. SELECT AUFNR, KTEXT, BUKRS, DZSX INTO :gw_out-AUFNR, :gw_out-KTEXT, :gw_out-BUKRS, :gw_out-DZSX FROM ZZTLD_BASE_FI_SALEORDER_002 WHERE ztype is NULL endexec. form pf_get_zz. append gw_out to gt_out . clear: gw_out,gw_return. endform.
SAP HANA SLT 将Oracle表 数据同步到HANA数据库
简单介绍SLT 同步数据的整个配置过程:
在SLT系统中创建与Oracle的链接
在HANA监控平台上,创建Configuration
创建表的同步作业
——————————————BEGIN—————————————————————————
1.在SLT系统中创建与Oracle的链接
在SLT系统中输入T-Code:dbacockpit
1.选择 Database Connections
2.选择Oracle
3.单击ADD按钮,新建一个与Oracle数据库的连接
如图:
上图中是链接Oracle数据库的一些参数。输入相应的连接参数后,点击运行,测试是否连接成功。
2.在HANA监控平台上,创建Configuration
T-code:ltrc
点击新建按钮,进入向导。
源端是我们之前创建的Oracle链接
目标端为HANA数据库的连接信息
3.创建表的同步作业
点击进去创建好的Configuration
输入表名,点击运行。
start load 数据只一次抽取
start replication 数据实时同步
stop load/replication 停止同步
这是同步作业就会出现在平台上,可以监控它的运行情况。
-----------------------------------
二·,建立数据库连接
EXEC SQL. “连接数据库,此名称在ST04-数据库连接中可看
connect to ‘READ‘
ENDEXEC.
EXEC SQL. “设置连接
set connection ’READ’
ENDEXEC.
EXEC SQL. “执行SQL,可在此附加PERFORMING参数实现多条查询
<NATIVE SQL statement> “NATIVE SQL语句
ENDEXEC.
EXEC SQL. “断开连接
DISCONNECT 'READ'
ENDEXEC.
PS:SQL执行语句,可以放置在循环体中
三,游标 读取数据
DATA : c TYPE cursor . [?k?:s?]
DATA : wa TYPE spfli.
" 1 、 打开游标
OPEN CURSOR : c FOR SELECT carrid connid FROM spfli WHERE carrid = 'LH' .
DO .
" 2 、读取数据
FETCH NEXT CURSOR c INTO CORRESPONDING FIELDS OF wa.
IF sy-subrc <> 0 .
" 3 、关闭游标
CLOSE CURSOR c .
EXIT .
ELSE .
WRITE : / wa-carrid, wa-connid.
ENDIF .
ENDDO .
TABLES DBCON. TYPES: BEGIN OF GS_ASN, WERKS TYPE ZPPS064-WERKS, MATNR TYPE ZPPS064-MATNR, MENGE TYPE ZPPS064-MENGE, WEGIHT TYPE ZPPS064-WEGIHT, END OF GS_ASN. DATA: GT_ASN TYPE STANDARD TABLE OF GS_ASN, GW_ASN TYPE GS_ASN. DATA: LF_FALG TYPE CHAR1. FIELD-SYMBOLS:<FS_ASN> TYPE GS_ASN. CONSTANTS P_CONNR TYPE DBCON-CON_NAME VALUE 'crm'. *1--------访问数据库------------------------------- DATA LF_WEEK TYPE CHAR4 . LF_WEEK = '7210'. TRY. EXEC SQL. connect TO :p_connr ENDEXEC. EXEC SQL. SET connection :p_connr ENDEXEC. IF LF_FALG IS INITIAL . TRY. "打开游标 EXEC SQL. OPEN C_RECORD FOR SELECT ORG.PAY_TO_PARTY_ID AS WERKS, FPC.PRODUCT_ID AS MATNR, FPC.COUNT AS MENGE, FP.PACK_WEGIHT AS WEGIHT FROM FACTORY_PRODUCT_COUNT FPC INNER JOIN FACTORY_PRODUCT_ENABLE fp ON fp.product_store_id = fpc.product_store_id AND fp.PROduct_id = fpc.PROduct_id LEFT JOIN ( SELECT PRODUCT_STORE_ID, PAY_TO_PARTY_ID FROM ORGVIEW WHERE PRODUCT_STORE_ID NOT LIKE '800%' AND PRODUCT_STORE_ID NOT LIKE 'R%' ) ORG ON ORG.PRODUCT_STORE_ID = FPC.PRODUCT_STORE_ID WHERE ORG.PAY_TO_PARTY_ID = :lf_week ORDER BY ORG.PAY_TO_PARTY_ID, FPC.PRODUCT_ID ENDEXEC. CATCH CX_SY_NATIVE_SQL_ERROR. LF_FALG = 'X'. ENDTRY. ENDIF. IF LF_FALG IS INITIAL . DO. TRY . "读取游标 EXEC SQL. FETCH NEXT C_RECORD INTO :GW_ASN ENDEXEC. CATCH CX_SY_NATIVE_SQL_ERROR. WRITE '读取游标失败'. ENDTRY. IF SY-SUBRC <> 0. EXIT. ELSE. APPEND GW_ASN TO GT_ASN . CLEAR GW_ASN . ENDIF. ENDDO. "关闭游标 EXEC SQL. CLOSE C_RECORD ENDEXEC. ENDIF. *关闭连接 EXEC SQL. DISCONNECT :p_connr ENDEXEC. ENDTRY.
本文来自博客园,作者:雨水果冻,转载请注明原文链接:https://www.cnblogs.com/yushuiguodong/p/16594197.html