SAP调用外部数据库
SAP 中可以通过配置数据库的链接,来完成从SAP链接到外部的数据库中进行处理数据,具体操作如下:
1、先进入事务:DBCO,设置数据库链接。进入该事务后,如果系统已经有配置过类似链接则会出现在如下画面中,如图1:
(图1)
2、在该配置中的难点在于您使用的服务器类型,sap中提供多种选择,如图2:
(图2)
3、说其是难点,是因为不同的数据库类型,在‘链接信息’这栏填写的内容格式是不一样的,重点说明MSS和ORA(因为我只用到了这两种);
a)、SQL Server
这里的连接信息很接近 Sql Server 的连接字符串,但是参数名略有不同。指定主机IP、端口号、数据库名即可。
b)、Oracel
oracel的链接信息比较隐晦,必须在 SAP 应用服务器上安装 Oracel client ,然后设置链接,再在这里的链接信息进行指定。
4、设置完事务DBCO后,就可以进行编写代码测试链接是否成功。(注:任何数据库配置信息都存放在表DBCON中)
测试代码:(也可以见附件)
附件代码:
1 *&---------------------------------------------------------------------* 2 *& Report ZQIU_TEST46 3 *& 4 *&---------------------------------------------------------------------* 5 *& 从SAP获取SRM中的数据 6 *& SRM的数据库为Oracel 7 *&---------------------------------------------------------------------* 8 9 REPORT zqiu_test46. 10 11 TABLES dbcon. 12 13 TYPES: BEGIN OF gs_asn, 14 vendor_code(100) TYPE c,"供应商代码 15 vendor_name(100) TYPE c,"供应商名称 16 ship_date TYPE d,"发货日期 17 "creation_date TYPE d,"创建日期 18 org_code(100) TYPE c,"公司代码 19 item_code(30) TYPE c,"物料编码 20 item_name(1000) TYPE c,"物料描述 21 "ship_quantity 22 segment1(30) TYPE c,"订单号 23 line_num(30) TYPE c,"行号 24 END OF gs_asn. 25 26 DATA: gt_asn TYPE STANDARD TABLE OF gs_asn, 27 gw_asn TYPE gs_asn. 28 29 FIELD-SYMBOLS:<fs_asn> TYPE gs_asn. 30 31 CONSTANTS p_connr TYPE dbcon-con_name VALUE 'ZDBC0002'. 32 33 *TRY. 34 * EXEC SQL. 35 * CONNECT TO :p_connr 36 * ENDEXEC. 37 * EXEC SQL. 38 * SET CONNECTION :p_connr 39 * ENDEXEC. 40 * 41 * IF sy-subrc EQ 0. 42 * WRITE: / '连接成功!'. 43 * ELSE. 44 * WRITE: / '连接失败!'. 45 * ENDIF. 46 *ENDTRY. 47 48 START-OF-SELECTION. 49 PERFORM frm_get_data. 50 51 *&---------------------------------------------------------------------* 52 *& Form frm_get_data 53 *&---------------------------------------------------------------------* 54 * text 55 *----------------------------------------------------------------------* 56 FORM frm_get_data. 57 TRY. 58 EXEC SQL. 59 connect to :p_connr 60 ENDEXEC. 61 EXEC SQL. 62 set connection :p_connr 63 ENDEXEC. 64 EXEC SQL PERFORMING frm_get_lines. 65 select a.vendor_code, 66 a.vendor_name, 67 a.ship_date, 68 a.org_code, 69 b.item_code, 70 b.item_name, 71 b.segment1, 72 b.line_num 73 into :gw_asn-vendor_code, 74 :gw_asn-vendor_name, 75 :gw_asn-ship_date, 76 :gw_asn-org_code, 77 :gw_asn-item_code, 78 :gw_asn-item_name, 79 :gw_asn-segment1, 80 :gw_asn-line_num 81 from inv_asn_headers a inner join inv_asn_lines b on a.asn_header_id = b.asn_header_id 82 where b.segment1 = '60036078' 83 and b.status = 'NEW' 84 85 ENDEXEC. 86 87 "关闭连接 88 EXEC SQL. 89 DISCONNECT :p_connr 90 ENDEXEC. 91 ENDTRY. 92 93 IF gt_asn IS NOT INITIAL. 94 WRITE:/ '获取数据成功!'. 95 96 PERFORM frm_out_put. 97 ENDIF. 98 99 ENDFORM. "frm_get_data 100 101 102 *&---------------------------------------------------------------------* 103 *& Form frm_get_lines 104 *&---------------------------------------------------------------------* 105 * text 106 *----------------------------------------------------------------------* 107 FORM frm_get_lines. 108 APPEND gw_asn TO gt_asn. 109 ENDFORM. "frm_get_lines 110 111 112 *&---------------------------------------------------------------------* 113 *& Form frm_out_put 114 *&---------------------------------------------------------------------* 115 * text 116 *----------------------------------------------------------------------* 117 FORM frm_out_put. 118 LOOP AT gt_asn ASSIGNING <fs_asn>. 119 WRITE: / <fs_asn>-vendor_code,<fs_asn>-vendor_name,<fs_asn>-ship_date,<fs_asn>- 120 121 org_code,<fs_asn>-item_code,<fs_asn>-item_name,<fs_asn>-segment1,<fs_asn>-line_num. 122 ENDLOOP. 123 ENDFORM. "frm_out_put
(注:参考来源 http://wenku.baidu.com/link?url=NNWN6JwQIEIsCmGX2z56W-GmNiWf0mX99coAK8BBYxylhl8khM-GttTb70RsWS_X2kkGkh591cQIhUqB0smanFJwm5PZGIWkXuKjY6B152K )
(注:该文是本人在实践中的结果,如果有什么不足与问题望大家能指出,谢谢!O(∩_∩)O~!!!)