原生SQL接口API(ADBC)的使用

通常我们在项目实施过程中,会遇到需要从外围系统数据库中取数,插入数据,删除数据等操作,通常我们都会使用native sql,下面介绍一下adbc的使用方法,个人感觉比native sql更好一些,而且更加符合面向对象的开发理念,至于什么是adbc,以及adbc更多的介绍,大家可以通过百度了解更多,这里就不一一介绍了,下面通过代码来讲解具体的使用方法。

更多的demo大家可参照sap标准的demo,以下:

 

背景:ECC需要从BW系统的表中获取数据,通常我们会在bw系统创建一个远程函数调用来获取,这里我们使用adbc的方式实现

1.首先,dbco创建ecc与bw 系统hanadb的数据库连接,可以找伟大的basis帮忙配置

 

2.创建一个程序,为了方便调试,增加了选择屏幕跟查询条件

PARAMETERS: p_con   TYPE dbcon-con_name, 

            p_werks TYPE t001w-werks.

3.声明一个类,用于实现adbc的功能

CLASS adbc DEFINITION."类定义

  "公共方法,对外公开

  PUBLIC SECTION.

    METHODS:

      main."主方法

    DATA con_ref TYPE REF TO cl_sql_connection.

    "私有方法,用于本身系统调用

  PRIVATE SECTION.

    METHODS:

      connect"连接数据库

        IMPORTING p_con_name TYPE dbcon-con_name

        RAISING   cx_sql_exception,

      select_into_table"取数

        RAISING cx_sql_exception.

    "插入数据,删除表,等大家可自行研究,这里就不写了

ENDCLASS.

4.类的具体实现

CLASS adbc IMPLEMENTATION.

  METHOD main.

    "连接数据库

    connect( p_con ).

    "取数

    select_into_table( ).

  ENDMETHOD.

  

  METHOD connect.

    "连接数据库

    con_ref = cl_sql_connection=>get_connection( p_con_name ).

  ENDMETHOD.

  METHOD select_into_table.

    "定义用户接收数据的内表

    DATA :BEGIN OF ls_data,

            plant TYPE t001w-werks,

          END OF ls_data,

          lt_data LIKE TABLE OF ls_data.

    CLEAR:ls_data,lt_data.

    "构造sql语句,具体的sql方式需要跟连接的数据库用法一致,例如下面的sql是hanadb的sql语句

    DATA(l_stmt) = |SELECT TOP 100 "PLANT" FROM "SAPHANADB"."/BIC/AZTWWS0162" WHERE "PLANT" = '{ p_werks }'|.

    "创建语句对象,要从哪个表取,后面放哪个表

    DATA(l_stmt_ref) = con_ref->create_statement( tab_name_for_trace = |"SAPHANADB"."/BIC/AZTWWS0162"| ).

    "执行sql

    DATA(l_res_ref) = l_stmt_ref->execute_query( l_stmt ).

    "这里可以不用,显得有些多余

    DATA lt_column TYPE adbc_column_tab.

    lt_column = VALUE #( ( 'PLANT' ) ).

    "通过方法获取sql得到的数据

    l_res_ref->set_param_table( EXPORTING itab_ref = REF #( lt_data )

                                          corresponding_fields = lt_column ).

    "必须通过下面的方法,数据才会写入到内表中

    l_res_ref->next_package( ).

    l_res_ref->close( ).

  ENDMETHOD.

ENDCLASS.

5.调用main方法

START-OF-SELECTION.

  "调用main方法

  NEW adbc( )->main( ).

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值