zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    java导出excel 浏览器直接下载或者或以文件形式导出
    linux查看用户登录时间以及命令历史
    MySQL复制表-INSERT INTO SELECT
    通过java代码往mysql数据库中写入日期相关数据少13个小时
    java8新的时间日期库及使用示例
    使用JSR-303进行校验
    centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied
    Docker命令之 cp
    Docker命令之 search
    Docker命令之 save
  • 原文地址:https://www.cnblogs.com/tangcy1110/p/9958480.html
Copyright © 2011-2022 走看看