DB Link也是我们会在企业内部经常会用到的一个取数的方法,简单快捷。但是首先需要在( DBCO )中创建。
1、使用事务码:dbco新建连接信息条目
【参数介绍】
连接名:连接池的名字;
DBMS:选择要连接的数据库类型(这里以oracel为例);
用户名称:输入要连接的数据的用户名;
数据库口令:输入要连接的数据的用户口令;
连接信息:不同的数据库写法不一样,连接名.WORLD
Permanent:连接方式(是否是永久连接);
连接信息:不同的数据库类型的连接信息不一致。
a)、SQL Server
MSSSQL_SERVER = 服务器名 MSSSQL_DBNAME=数据库名 OBJECT_SOURCE= 数据库名
b)、 Oracel
oracel的链接信息比较隐晦,必须在 SAP 应用服务器上安装 Oracel client ,然后设置链接,再在这里的链接信息进行指定。
先在SAP底层ORACLE数据库编辑TNS文件,一般由BASIS配置完成,配置路径:DIR_ORAHOME->network->admin->tnsnames.ora;配置完成后我们可以用事务码:AL11查看配置是否正确,AL11查看连接【HR9DEV.WORLD】具体配置
一般先使用AL11将系统内tnsnames.ora文件下载到本地,
本系统中的路径如上图,找到tnsnames.ora文件点开进去,然后点击菜单list→save→file,选择未转换的格式保存到本地。
(2)在保存后的本地tns文件中添加要连接的数据库拼接串信息
(3)最后使用CG3Z将修改后的tns文件上传到sap上,注意上传地址完整不要错。
DB02进入后点击DB CONNECTION,然后选中要测试的数据库点击执行,若连接不成功可根据错误号排查。
c)、链接DB2数据库
执行事务码DBCO,点新条目按钮,填写如下图所示信息
连接信息看上去比较直接,分别是数据库名、端口号、主机IP地址。
2、
DATA:
lo_sql TYPE REF TO cl_sql_statement,
ltm_open TYPE REF TO cl_sql_connection,
lo_result TYPE REF TO cl_sql_result_set,
*-Exception Class for SQL Error
zci_sql_exception
TYPE REF TO cx_sql_exception.
DATA: l_sqlstmt TYPE string ,
l_dref TYPE REF TO data .
DATA: g_subrc LIKE sy-subrc ,
g_dbcln LIKE dbcon-con_name , " Connection Name
g_ifdtn TYPE string , " Interface Table Name
g_rtmsg TYPE balmsgtxtp .
if g_dbcln is initial.
create object ltm_open.
else.
ltm_open = cl_sql_connection=>get_connection( g_dbcln ).
create object lo_sql
exporting
con_ref = ltm_open.
endif.
l_sqlstmt = 'select customer_order_no, bl_status_name, pppicking_time_d, delivery_status_name, delivery_who, dest_customer_namec, dest_customerno, sold_to,'
&& ' dest_customer_address, dest_customer_contact, dest_customer_tel1, followerup2, followerup, carrierid, carrierid_c,'
&& ' convert(varchar,delivery_time,23) as delivery_time, udf19, productname, sales_org, tax_code, offering_type_c, trservice_type_c,'
&& ' doc_return_time_d1, order_type, left(edittime_d,10) as edittime_d1, bl_status from vman_doc_bl_order_header'.
concatenate l_sqlstmt ' where left(edittime_d,10 ) between ' into l_sqlstmt separated by space.
* concatenate l_sqlstmt ''''lv_begin_date_c'''' into l_sqlstmt separated by space.
l_sqlstmt = l_sqlstmt && | | && '''' && lv_begin_date_c && '''' .
concatenate l_sqlstmt ' and ' into l_sqlstmt separated by space.
l_sqlstmt = l_sqlstmt && | | && '''' && lv_end_date_c && '''' .
concatenate l_sqlstmt ' and bl_status > 70 and bl_status <> 90 ' into l_sqlstmt separated by space.
lo_result = lo_sql->execute_query( l_sqlstmt ).
get reference of lt_detail[] into l_dref.
lo_result->set_param_table( l_dref ).
lo_result->next_package( ).
lo_result->close( ).
*-Local Data Declaration
data: l_dbcln like dbcon-con_name value space.
*-Disconnect DB
l_dbcln = ltm_open->get_con_name( ).
check l_dbcln ne cl_sql_connection=>c_default_connection.
ltm_open->close( ).
DATA: exc_ref TYPE REF TO cx_sy_native_sql_error,
error_text TYPE string.
t_dbname = 'PLMDB'.
EXEC SQL.
CONNECT TO :t_dbname
ENDEXEC.
EXEC SQL.
SET CONNECTION :t_dbname
ENDEXEC.
TRY.
EXEC SQL.
SELECT max(to_number(OBID)) INTO :t_OBID from Z_HRDATA
ENDEXEC.
LOOP AT t_YUSER_QUIT.
t_OBID = t_OBID + 1.
EXEC SQL.
INSERT INTO Z_HRDATA
( OBID, DTYUERCATEGORY, DTYUSERRECORDDATE, EMAILADDR, DTNTDOMAIN, PDMUSRNTACCOUNT, PDMUSREMPLOYID,
DTORIGINALDEPTCODE, DTORIGINALDEPTNAME, DTNEWDEPTCODE, DTNEWDEPTNAME, DTYUSERLOCATIONNAME,
DTYUSERQUITAPPLYDATE, DTYUSERQUITACTIVEDATE, DTYUSERUPLOADDATE, DTYUSERUPLOADTIME )
VALUES
( :t_OBID, :t_YUSER_QUIT-CATEGORY, to_char(to_date(:t_YUSER_QUIT-RECORDDATE,'YYYYMMDD'),'YYYY/MM/DD'), :t_YUSER_QUIT-YMAIL,
:t_YUSER_QUIT-YNTDOMAIN, :t_YUSER_QUIT-YNTACCOUNT, :t_YUSER_QUIT-ID,
:t_YUSER_QUIT-ORGDEPTNO, :t_YUSER_QUIT-ORGDEPTNAME, :t_YUSER_QUIT-NEWDEPTNO, :t_YUSER_QUIT-NEWDEPTNAME, :t_YUSER_QUIT-LOCATION,
to_char(to_date(:t_YUSER_QUIT-APPLYDATE,'YYYYMMDD'),'YYYY/MM/DD'), to_char(to_date(:t_YUSER_QUIT-ACTIVEDATE,'YYYYMMDD'),'YYYY/MM/DD'),
to_char(to_date(:t_YUSER_QUIT-UPLOADDATE,'YYYYMMDD'),'YYYY/MM/DD'), to_char(to_date(:t_YUSER_QUIT-UPLOADTIME,'hh24miss'),'hh24:mi:ss') )
ENDEXEC.
EXEC SQL.
commit
ENDEXEC.
ENDLOOP.
EXEC SQL.
DISCONNECT :t_dbname
ENDEXEC.
CATCH cx_sy_native_sql_error INTO exc_ref.
error_text = exc_ref->get_text( ).
WRITE: / 'Error:', error_text.
ENDTRY.
DEMO程序:ADBC_DEMO,
测试连接性:
1、DB02
2、SE38执行
ADBC_TEST_CONNECTION