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.