1. 程式人生 > >ABAP使用ODBC的方式進行ORACLE資料庫的連線

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.