1、先进入事务:DBCO,设置数据库链接。进入该事务后,如果系统已经有配置过类似链接则会出现在如下画面中,如图:

SAP-ABAP 调用外部数据库获取数据_sql

2、在该配置中的难点在于您使用的服务器类型,sap中提供多种选择:

SAP-ABAP 调用外部数据库获取数据_oracle_02

3、说其是难点,是因为不同的数据库类型,在‘链接信息’这栏填写的内容格式是不一样的,重点说明MSS和ORA(因为我只用到了这两种);

a)、SQL Server

SAP-ABAP 调用外部数据库获取数据_数据_03

这里的连接信息很接近 Sql  Server  的连接字符串,但是参数名略有不同。指定主机IP、端口号、数据库名即可。

b)、Oracel

SAP-ABAP 调用外部数据库获取数据_数据库_04

oracel的链接信息比较隐晦,必须在 SAP 应用服务器上安装 Oracel client  ,然后设置链接,再在这里的链接信息进行指定。

4、设置完事务DBCO后,就可以进行编写代码测试链接是否成功。(注:任何数据库配置信息都存放在表DBCON中)

5、测试是否联通 ADBC_TEST_CONNECTION

SAP-ABAP 调用外部数据库获取数据_SAP_05

 SAP-ABAP 调用外部数据库获取数据_数据_06

 

如下代码测试:

 

 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. 
、 打开游标 
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.