SAP連接外部ORACLE數據庫


SAP連接外部ORACLE數據庫 
1.先在SAP底層ORACLE數據庫編輯TNS文件,一般由BASIS配置完成.配置完成后我們可以用事務碼:AL11查看配置是否正確,路徑:DIR_ORAHOME->network->admin->tnsnames.ora查看對應的TNS是否配置正確,如:

ORADB04.world = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = 
(PROTOCOL = TCP) 
(HOST = XXX.XXX.XXX.XXX) 
(PORT = 1521) 


(CONNECT_DATA = 
(SERVICE_NAME = XXXX) 

)

2.在SAP中用DBCO配置,如下:

 

 

 

3.編寫ABAP程序實現SAP訪問外部ORACLE數據庫,並插入數據。 
有兩個例子: 


例子1: 
REPORT zljc_nativesql2 . 
DATA: p_dbname(10) VALUE ‘SIPS’. 
DATA: l_sql_error TYPE REF TO cx_sy_native_sql_error, 
l_error_text TYPE string.

TYPES: BEGIN OF ty_room, 
room_id(30), 
room_name(100), 
room_people(10), 
room_desc(100), 
END OF ty_room.

DATA: gt_room TYPE TABLE OF ty_room , 
gs_room TYPE ty_room.

gs_room-room_id = ‘no-201’. 
gs_room-room_name = ‘風波亭’. 
gs_room-room_people = ‘5’. 
gs_room-room_desc = ‘岳武穆遺書’. 
APPEND gs_room TO gt_room.

gs_room-room_id = ‘no-202’. 
gs_room-room_name = ‘威虎山’. 
gs_room-room_people = ‘5’. 
gs_room-room_desc = ‘座山雕老巢’. 
APPEND gs_room TO gt_room.

gs_room-room_id = ‘no-203’. 
gs_room-room_name = ‘白宮’. 
gs_room-room_people = ‘29’. 
gs_room-room_desc = ‘美國總統府’. 
APPEND gs_room TO gt_room.

gs_room-room_id = ‘no-204’. 
gs_room-room_name = ‘鳥巢’. 
gs_room-room_people = ‘5’. 
gs_room-room_desc = ‘奧運會主場館’. 
APPEND gs_room TO gt_room.

gs_room-room_id = ‘no-205’. 
gs_room-room_name = ‘鳳儀亭’. 
gs_room-room_people = ‘5’. 
gs_room-room_desc = ‘貂蟬和呂布’. 
APPEND gs_room TO gt_room.

gs_room-room_id = ‘no-206’. 
gs_room-room_name = ‘偽皇宮’. 
gs_room-room_people = ‘5’. 
gs_room-room_desc = ‘偽滿皇帝’. 
APPEND gs_room TO gt_room.

TRY. 
EXEC SQL. 
CONNECT TO :p_dbname 
ENDEXEC.

CATCH cx_sy_native_sql_error INTO l_sql_error. 
CALL METHOD l_sql_error->get_text 
RECEIVING 
result = l_error_text. 
WRITE: AT /1 l_error_text. 
ENDTRY. 
IF sy-subrc <> 0. 
WRITE: /1 ‘連接到數據庫失敗:’, l_error_text ,’,請聯系管理員!’.

STOP. 
ENDIF.

TRY. 
LOOP AT gt_room INTO gs_room. 
EXEC SQL. 
insert into ljc_room 
( room_id, 
room_name, 
room_people, 
room_desc ) 
values(:gs_room-room_id, 
:gs_room-room_name, 
:gs_room-room_people, 
:gs_room-room_desc)

   ENDEXEC.
 ENDLOOP.
 "捕獲異常
1
2
3
CATCH cx_sy_native_sql_error INTO l_sql_error. 
l_error_text = l_sql_error->get_text( ). 
ENDTRY. 
“*操作Oracle數據庫時,異常處理 
IF NOT l_error_text IS INITIAL. “如果捕獲到異常,記錄日志,回滾 
CLEAR l_error_text. 
EXEC SQL. 
rollback 
ENDEXEC. 
ELSE. ” 如果無異常,提交插入數據 
EXEC SQL. 
commit 
ENDEXEC. 
ENDIF.

EXEC SQL. 
DISCONNECT :p_dbname 
ENDEXEC.

 

舉例  2

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.  

 


免責聲明!

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



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