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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM