ABAP使用ODBC的方式进行ORACLE数据库的连接

SAP本身支持直接对外部多种数据库的直接访问,数据库类型通过搜索帮助可知:

这里主要介绍如何进行ORA也就是oracle数据库的连接以及给出实例。

ORA的配置分成二部分,一部分是SAP服务器需要有oracle的数据库驱动,比较直接的方式就是在服务器上安装相应版本的oracle,然后配置tnsnames.ora文件数据库的地址信息。

根据其他同事的经验,如果SAP版本是使用oracle作为底层数据库的话只需要配置tnsnames.ora文件夹即可。

第二部分在SAP客户端前段进行,使用事务代码DBCO或者DB02进入,按照要求填写信息:

配置完成后可以使用页面中的测试进行连接测试,也可以使用程序ADBC_TEST_CONNECTION进行连接测试。

实例:

①如何使用SELECT获取表信息

②如何使用INSERT/UPDATE

DATA: gw_dbs TYPE dbcon-con_name VALUE 'Z_ORACLE'.

  TRY.
      EXEC SQL.
        connect to :gw_dbs
      ENDEXEC.

    CATCH cx_sy_native_sql_error INTO g_obj_sqldb.
      CALL METHOD g_obj_sqldb->get_text
        RECEIVING
          result = g_error_text.
  ENDTRY.
  IF g_error_text is INITIAL.
    EXEC SQL.
      SET CONNECTION 'Z_ORACLE'
    ENDEXEC.
    TRY .
        EXEC SQL PERFORMING loop_output.
          SELECT *
          FROM hfm_sap_gl_balances
          INTO :wa 
        ENDEXEC.
      CATCH  cx_sy_native_sql_error INTO g_obj_sqldb.
        CALL METHOD g_obj_sqldb->get_text
          RECEIVING
            result = g_error_text.
    ENDTRY.
  ELSE.
    MESSAGE s000 WITH g_error_text DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

FORM loop_output.
  APPEND gs_balances TO gt_balances.
ENDFORM.


  EXEC SQL.
    DISCONNECT :gw_dbs
  ENDEXEC.


前面这一段代码详细介绍使用了FORM的方式获取表的内容,自然如果是单条信息的话就不需要添加PERFORMING loop_output这一段代码了,

至于INSERT与UPDATE的使用方法相对简单,直接贴核心代码

    EXEC SQL.
      UPDATE hfm_sap_gl_balances
         SET begin_balance_end     = :i_passin-begin_balance_end,
             period_net_dr         = :i_passin-period_net_dr,
             period_net_cr         = :i_passin-period_net_cr,
             period_net_end        = :i_passin-period_net_end,
             begin_balance_end_rmb = :i_passin-begin_balance_end_rmb,
             period_net_dr_rmb     = :i_passin-period_net_dr_rmb,
             period_net_cr_rmb     = :i_passin-period_net_cr_rmb,
             period_net_end_rmb    = :i_passin-period_net_end_rmb,
             last_update_date      = to_date(:sy-datum,'YYYYMMDD HH24:MI:SS')
       WHERE period_year   = :i_passin-period_year
         AND period_num    = :i_passin-period_num
         AND company_code  = :i_passin-company_code
         AND account_code  = :i_passin-account_code
         AND customer_code = :i_passin-customer_code
         AND type_code     = :i_passin-type_code
    ENDEXEC.
    EXEC SQL.
      INSERT INTO hfm_sap_gl_balances
      (period_year,
      period_num,
      currency_code,
      company_code,
      department_code,
      account_code,
      customer_code,
      type_code,
      begin_balance_end,
      period_net_dr,
      period_net_cr,
      period_net_end,
      begin_balance_end_rmb,
      period_net_dr_rmb,
      period_net_cr_rmb,
      period_net_end_rmb,
      account_type,
      last_update_date
      )
      VALUES
      (:i_passin-period_year,
      :i_passin-period_num,
      :i_passin-currency_code,
      :i_passin-company_code,
      '',
      :i_passin-account_code,
      :i_passin-customer_code,
      :i_passin-type_code,
      :i_passin-begin_balance_end,
      :i_passin-period_net_dr,
      :i_passin-period_net_cr,
      :i_passin-period_net_end,
      :i_passin-begin_balance_end_rmb,
      :i_passin-period_net_dr_rmb,
      :i_passin-period_net_cr_rmb,
      :i_passin-period_net_end_rmb,
      :i_passin-account_type,
      to_date(:sy-datum,'YYYYMMDD HH24:MI:SS'))
    ENDEXEC.

当然最后别忘了提交

  EXEC SQL.
    COMMIT
  ENDEXEC.

 

posted @ 2018-11-14 16:09  陈一清  阅读(4334)  评论(0编辑  收藏  举报