ABAP连接外部数据库+NATIVE SQL
DBACOCKPIT 建数据库连接注:测试连接如果出错,可以用ADBC_TEST_CONNECTION测试,ADBC_TEST_CONNECTION测试后有个图标可以点进trace文件,拉到最后,就是出错的具体信息。连接成功后可以用ADBC_QUERY查询表结构和数据如果报错少文件B B Loading DB library '/usr/sap/<SID>/D80/exe/dboras
DBACOCKPIT 建数据库连接
注:测试连接如果出错,可以用ADBC_TEST_CONNECTION 测试,ADBC_TEST_CONNECTION 测试后有个图标可以点进trace文件,拉到最后,就是出错的具体信息。
连接成功后可以用ADBC_QUERY查询表结构和数据
如果报错少文件
B B Loading DB library '/usr/sap/<SID>/D80/exe/dboraslib.so' ...
M *** ERROR => DlLoadLib()==DLENOACCESS - dlopen("/usr/sap/<SID>/D80/exe/dboraslib.so") FAILED
解决
https://launchpad.support.sap.com/#/notes/2850410
2850410 - DBSL is missing during remote database connection to Oracle
NATIVE SQL 操作 ORACLE
SELECT
data:
lv_dbs(20),
lo_exc_ref type ref to cx_sy_native_sql_error,
lv_error_text type string.
lv_dbs = 'HR'.
try.
exec sql.
CONNECT TO :lv_dbs
endexec.
if sy-subrc <> 0.
raise exception type cx_sy_native_sql_error.
endif.
exec sql.
open c for
select objid,stext
from EDH.ZHR_ZZJG
endexec.
do.
exec sql.
FETCH NEXT c INTO :ls_zhr_zzjg
endexec.
append ls_zhr_zzjg to lt_zhr_zzjg.
if sy-subrc ne 0.
exit.
endif.
enddo.
exec sql.
CLOSE c
endexec.
exec sql.
DISCONNECT :lv_dbs
endexec.
catch cx_sy_native_sql_error into lo_exc_ref.
clear: lv_error_text.
lv_error_text = lo_exc_ref->get_text( ).
message lv_error_text type 'I'.
gt_alv-rtype = 'E'.
gt_alv-rtmsg = lv_error_text.
modify gt_alv transporting rtype rtmsg where sel = 'X'.
endtry.
MODIFY
data:
lv_dbs(20),
lo_exc_ref type ref to cx_sy_native_sql_error,
lv_error_text type string.
data:
lv_xianb like ztpp0015-xianb.
lv_dbs = 'TEST'.
try.
exec sql.
CONNECT TO :lv_dbs
endexec.
if sy-subrc <> 0.
raise exception type cx_sy_native_sql_error.
endif.
loop at gt_alv where sel = 'X'.
exec sql.
SELECT xianb
INTO :lv_xianb
FROM ZTPP0015
WHERE werks = :gt_alv-werks and xianb = :gt_alv-xianb
endexec.
if sy-subrc = 0.
exec sql.
update ZTPP0015 set
descp_xb = :gt_alv-descp_xb, bum = :gt_alv-bum, descp_bm = :gt_alv-descp_bm,
weiw = :gt_alv-weiw, lifnr = :gt_alv-lifnr, name1_lifnr = :gt_alv-name1_lifnr, name1_werks = :gt_alv-name1_werks,
del = :gt_alv-del, aenam = :gt_alv-aenam, aedat = :gt_alv-aedat, aezet = :gt_alv-aezet
where werks = :gt_alv-werks and xianb = :gt_alv-xianb
endexec.
else.
exec sql.
INSERT INTO ZTPP0015
( werks, xianb, descp_xb, bum, descp_bm,weiw,lifnr,name1_lifnr,name1_werks,del,aenam,aedat,aezet)
VALUES
( :gt_alv-werks,:gt_alv-xianb,:gt_alv-descp_xb,:gt_alv-bum,:gt_alv-descp_bm,:gt_alv-weiw,:gt_alv-lifnr,
:gt_alv-name1_lifnr,:gt_alv-name1_werks,:gt_alv-del,:gt_alv-aenam,:gt_alv-aedat,:gt_alv-aezet)
endexec.
endif.
IF sy-subrc = 0.
gt_alv-rtype = 'S'.
gt_alv-rtmsg = '发送成功'.
ENDIF.
modify gt_alv.
endloop.
exec sql.
COMMIT WORK.
DISCONNECT :lv_dbs
endexec.
catch cx_sy_native_sql_error into lo_exc_ref.
clear: lv_error_text.
lv_error_text = lo_exc_ref->get_text( ).
message lv_error_text type 'I'.
gt_alv-rtype = 'E'.
gt_alv-rtmsg = lv_error_text.
modify gt_alv transporting rtype rtmsg where sel = 'X'.
endtry.
SAP连接SQL SERVER
ADBC_TEST_CONNECTION 可以测试DBCO
1.用一个新的中间数据库(非sql server)同步sql server
2.装驱动 odbc
3.使用web service中间件
4.在服务器集群部署一台装在windows操作系统上的sap
5.abap使用OLE直连数据库,但是不能后台运行,性能较差
最终解决 notes 1644499
NATIVE SQL
连接SQL SERVER代码
- *DATA DB TYPE DBCON-CON_NAME VALUE 'ZWMS'.
- DATA OBJ_SQLDB TYPE REF TO CX_SY_NATIVE_SQL_ERROR.
- DATA RESULT TYPE STRING. "连接数据库返回信息
- TRY.
- EXEC SQL.
- CONNECT TO :'ZWMS'
- ENDEXEC.
- CATCH CX_SY_NATIVE_SQL_ERROR INTO OBJ_SQLDB.
- ENDTRY.
- RESULT = OBJ_SQLDB->GET_LONGTEXT( ).
使用基于CLASS的ADBC
- DBCO创建连接
- 使用CL_SQL_CONNECTION=>GET_CONNECTION
更多推荐
所有评论(0)