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
View Code

 (注:参考来源 http://wenku.baidu.com/link?url=NNWN6JwQIEIsCmGX2z56W-GmNiWf0mX99coAK8BBYxylhl8khM-GttTb70RsWS_X2kkGkh591cQIhUqB0smanFJwm5PZGIWkXuKjY6B152K )

(注:该文是本人在实践中的结果,如果有什么不足与问题望大家能指出,谢谢!O(∩_∩)O~!!!)

posted @ 2014-03-16 13:44  封~  阅读(8107)  评论(3编辑  收藏  举报