前言
PI/PO集成方式很多,但是有趣的灵魂不多,现在介绍一个直接用abap调用外部数据库的特殊方法
提示:以下是本篇文章正文内容,下面案例可供参考
一、SAP配置外部数据源
DBCO建立数据源(如果连接不上可能还是需要人家basis帮忙看看)
连接字符:MSSQL_SERVER=IP MSSQL_DBNAME=db_name OBJECT_SOURCE=实例
如果是oracle还是需要设置参数:AL11—— /usr/sap/DEV/SYS/profile/oracle/tnsnames.ora
BOPRD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ****->服务器IP)(PORT = 1521->端口))
)
(CONNECT_DATA =
(SID = orcl)
(SERVER = ***->服务器IP)
(SERVICE_NAME = orcl)
)
)
二、使用步骤
1.新建测试程序
se38
*&---------------------------------------------------------------------*
*& Report ZTEST_DBCO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_DBCO.
"dbco配置好p_connr为连接名
DATA: p_connr TYPE dbcon-con_name VALUE 'dbconame'.
data :l_field1 TYPE char30,l_field2 TYPE CHAR30 ,l_field3 TYPE CHAR30 .
TRY.
" 1.打开连接
EXEC SQL.
CONNECT TO :p_connr
ENDEXEC.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_sy_native_sql_error.
ELSE.
MESSAGE '连接成功' TYPE 'S'.
ENDIF.
EXEC SQL.
SET CONNECTION :p_connr
ENDEXEC.
"2.执行sql脚本,使用native sql
EXEC SQL .
OPEN C1 FOR SELECT ProductId , StoreId , StoreCode
FROM T_Product
WHERE StoreCode ='A010122'
ENDEXEC.
"3.读取游标数据
DO. "读取游标 ":t001-mandt, :t001-bukrs
EXEC SQL.
FETCH NEXT C1 INTO l_field1,:l_field2 ,:l_field3
ENDEXEC.
IF sy-subrc <> 0.
EXIT.
ELSE.
WRITE: / l_field1,l_field2 ,l_field3 . "写到界面
ENDIF.
ENDDO.
"使用完关闭游标
EXEC SQL.
CLOSE c1
ENDEXEC.
* 4.最后关闭连接
EXEC SQL.
DISCONNECT :p_connr
ENDEXEC.
CATCH cx_sy_native_sql_error.
MESSAGE `Error in Native SQL.` TYPE 'E'.
ENDTRY.
FORM loop_output.
WRITE: / l_field1,l_field2 ,l_field3.
ENDFORM .
2.使用场景介绍
项目中尝试过使用场景如下:
(1)报表核对,PI建立了接口,为了检查是否漏数据,我们做了数据核对报表,直接调用数据库校验pi运算后的结果
(2)BW实现即时数据抽取和展示,打包成函数供bw使用
总结
今天做bw即时数据抽取需求用到,分享给大家。