SAP连接外部ORACLE数据库
2015-10-12 18:00
423 查看
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)
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:
Function module:ZMM_SIPS_ROOM
调用funtion module 的程序: ZLJC_NATIVESQL3
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. "捕获异常
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:
Function module:ZMM_SIPS_ROOM
调用funtion module 的程序: ZLJC_NATIVESQL3
相关文章推荐
- oracle中的case when
- oracle中的case when
- Oracle SQL性能优化
- Oracle - SQL 错误: ORA-00917: 缺失逗号
- Oracle RMAN备份恢复指导书
- Oracle - 使用序列+触发器实现主键自增长
- MyEclipse链接oracle数据库提示:the network adapter could not establish connection
- oracle 第05章 SQL语句
- oracle The Network Adapter could not establish the connection
- 应用工具PLSQL同步ORACLE数据库数据
- mysql、oracle、sqlserver查询某数据库中对应的表的个数
- 应用工具PLSQL同步ORACLE数据库结构
- ORACLE 12C 冷备份方式的数据迁移(重建控制文件)
- oracle视图
- oracle数据库中nvl使用
- Oracle调用Java类
- Oracle查询表里的重复数据方法:
- oracle错误:cmd导入时报错-12541
- oracle 根据字段名查找表
- Oracle行转列和列转行