ABAP CALL DB Procedure demo
来源:互联网 发布:dnf战斗力查询 软件 编辑:程序博客网 时间:2024/05/16 16:17
CLASS zcl_demo_procedure01 DEFINITION PUBLIC FINAL CREATE PUBLIC . PUBLIC SECTION. INTERFACES if_amdp_marker_hdb. TYPES: BEGIN OF ty_matnr, matnr TYPE matnr, END OF ty_matnr . TYPES: BEGIN OF ty_material, matnr TYPE matnr, maktx TYPE maktx, END OF ty_material . TYPES: tt_material TYPE STANDARD TABLE OF ty_material . TYPES: tt_matnr TYPE STANDARD TABLE OF ty_matnr . METHODS constructor IMPORTING VALUE(isnew) TYPE flag . METHODS query IMPORTING VALUE(s_matnr) TYPE shp_matnr_range_t OPTIONAL EXPORTING VALUE(it_result) TYPE tt_material . METHODS admp IMPORTING VALUE(s_matnr) TYPE shp_matnr_range_t OPTIONAL EXPORTING VALUE(it_result) TYPE tt_material . METHODS cdbp IMPORTING VALUE(s_matnr) TYPE shp_matnr_range_t OPTIONAL EXPORTING VALUE(it_result) TYPE tt_material . PROTECTED SECTION. PRIVATE SECTION. DATA r_matnr TYPE tt_matnr . DATA client TYPE mandt . DATA api TYPE REF TO if_dbproc_proxy_public_api . METHODS get_data IMPORTING VALUE(r_matnr) TYPE tt_matnr VALUE(clt) TYPE mandt EXPORTING VALUE(it_result) TYPE tt_material . METHODS setup . METHODS setup_proxy . METHODS admp_meth IMPORTING VALUE(r_matnr) TYPE tt_matnr VALUE(clt) TYPE syst_mandt EXPORTING VALUE(it_result) TYPE tt_material . METHODS cdbp_meth IMPORTING VALUE(r_matnr) TYPE tt_matnr VALUE(clt) TYPE syst_mandt EXPORTING VALUE(it_result) TYPE tt_material .ENDCLASS.CLASS zcl_demo_procedure01 IMPLEMENTATION. METHOD admp. "ABAP manage db procedure IF s_matnr[] IS NOT INITIAL. SELECT matnr FROM mara INTO TABLE r_matnr WHERE matnr IN s_matnr. SORT r_matnr BY matnr. ENDIF. "call db procedure me->admp_meth( EXPORTING r_matnr = r_matnr clt = client IMPORTING it_result = it_result ). ENDMETHOD. METHOD admp_meth BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT. --"db_schema"."[package.]procedure_name" call "_SYS_BIC"."ZDBP_DEMO01"( r_matnr => :r_matnr, clt => :clt, it_result => :it_result ); ENDMETHOD. METHOD cdbp. "Call database procedure IF s_matnr[] IS NOT INITIAL. SELECT matnr FROM mara INTO TABLE r_matnr WHERE matnr IN s_matnr. SORT r_matnr BY matnr. ENDIF. "call me->cdbp_meth( EXPORTING r_matnr = r_matnr clt = client IMPORTING it_result = it_result ). ENDMETHOD. METHOD cdbp_meth. "proxy "--Specified directly and statically as proxy. "(proxy_name) CALL DATABASE PROCEDURE ('ZDBP_DEMO01_PROXY') EXPORTING r_matnr = r_matnr clt = client IMPORTING it_result = it_result. ENDMETHOD. METHOD constructor. client = sy-mandt. CHECK isnew = 'X'. "create procedure me->setup( ). ENDMETHOD. METHOD get_data BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT USING mara makt. --sql IT_RESULT = SELECT A.MATNR,T.MAKTX FROM MARA AS A LEFT JOIN MAKT AS T ON A.MANDT = T.MANDT AND A.MATNR = T.MATNR AND T.SPRAS = '1' WHERE A.MANDT = :CLT AND A.MATNR in ( SELECT MATNR FROM :R_MATNR ); ENDMETHOD. METHOD query. IF s_matnr[] IS NOT INITIAL. SELECT matnr FROM mara INTO TABLE r_matnr WHERE matnr IN s_matnr. SORT r_matnr BY matnr. ENDIF. "execute sql me->get_data( EXPORTING r_matnr = r_matnr clt = client IMPORTING it_result = it_result ). ENDMETHOD. METHOD setup. "Create a table type and a database procedure on HANA "Normally, those would be available statically DATA(sql) = NEW cl_sql_statement( ). DATA str TYPE string. TRY. sql->execute_ddl(`drop procedure "_SYS_BIC"."ZDBP_DEMO01"` ). CATCH cx_sql_exception ##no_handler. ENDTRY. TRY. sql->execute_ddl('drop type "_SYS_BIC"."ZDBP_MATNR_RANGE"' ). CATCH cx_sql_exception ##no_handler. ENDTRY. TRY. sql->execute_ddl('drop type "_SYS_BIC"."ZDBP_DEMO01_RESULT"' ). CATCH cx_sql_exception ##no_handler. ENDTRY. TRY. sql->execute_ddl( | create type "_SYS_BIC"."ZDBP_DEMO01_RESULT" as table | && | ( MATNR NVARCHAR(40), | && | MAKTX NVARCHAR(40) ) | ). str = | create type "_SYS_BIC"."ZDBP_MATNR_RANGE" as table | && | ( MATNR NVARCHAR(40) ) | . sql->execute_ddl( str ). str = | create procedure "_SYS_BIC"."ZDBP_DEMO01" | && | ( in R_MATNR ZDBP_MATNR_RANGE, | && | in CLT NVARCHAR(3), | && | out IT_RESULT ZDBP_DEMO01_RESULT ) language sqlscript as | && | begin | && | IT_RESULT = | && | SELECT A.MATNR,T.MAKTX | && | FROM MARA AS A LEFT JOIN MAKT AS T | && | ON A.MANDT = T.MANDT | && | AND A.MATNR = T.MATNR AND T.SPRAS = '1' | && | WHERE A.MANDT = :CLT | && | AND A.MATNR IN ( SELECT MATNR FROM :R_MATNR ); | && | end |. sql->execute_ddl( str ). CATCH cx_sql_exception INTO DATA(err). MESSAGE i001(00) WITH err->if_message~get_text( ) DISPLAY LIKE 'E'. LEAVE PROGRAM. ENDTRY. me->setup_proxy( ). ENDMETHOD. METHOD setup_proxy. "Create a database procedure proxy and its interface "Normally, those would be prepared in a framework or in ADT DATA db_schema TYPE if_dbproc_proxy_basic_types=>ty_db_name. "CALL FUNCTION 'DB_DBSCHEMA_CURRENT' " IMPORTING " dbschema = db_schema. db_schema = '_SYS_BIC'. "parameters override DATA(params) = VALUE if_dbproc_proxy_basic_types=>ty_param_override_t( ( db_name = 'R_MATNR' abap_name = 'R_MATNR' descr = cl_abap_typedescr=>describe_by_name( 'ZDBP_DEMO02' ) ) ). "create proxy TRY. api = cl_dbproc_proxy_factory=>get_proxy_public_api( if_proxy_name = `ZDBP_DEMO01_PROXY` ). api->delete( ). api = cl_dbproc_proxy_factory=>get_proxy_public_api( if_proxy_name = `ZDBP_DEMO01_PROXY` ). api->create_proxy( EXPORTING if_proc_schema = db_schema it_param_override = params if_proc_name = 'ZDBP_DEMO01' ). CALL FUNCTION 'DB_COMMIT'. CATCH cx_dbproc_proxy INTO DATA(err). MESSAGE i001(00) WITH err->if_message~get_text( ). LEAVE PROGRAM. ENDTRY. ENDMETHOD.ENDCLASS.
测试类
*"* use this source file for your ABAP unit test classesCLASS test_demo DEFINITION FOR TESTING DURATION MEDIUM RISK LEVEL HARMLESS FINAL. PUBLIC SECTION. PRIVATE SECTION. METHODS test FOR TESTING.ENDCLASS.CLASS test_demo IMPLEMENTATION. METHOD test. IF cl_db_sys=>is_in_memory_db = abap_false. RETURN. ENDIF. DATA s_matnr TYPE RANGE OF mara-matnr. APPEND VALUE #( sign = 'I' option = 'CP' low = '*') TO s_matnr. DATA(lr_test) = NEW zcl_demo_procedure01(''). lr_test->query( EXPORTING s_matnr = s_matnr[] IMPORTING it_result = DATA(osql_result) ). lr_test->cdbp( EXPORTING s_matnr = s_matnr[] IMPORTING it_result = DATA(cdbp_result) ). lr_test->admp( EXPORTING s_matnr = s_matnr[] IMPORTING it_result = DATA(admp_result) ). IF NOT ( osql_result = cdbp_result AND osql_result = admp_result ). cl_aunit_assert=>fail( msg = 'Wrong results' level = cl_aunit_assert=>tolerable ). ENDIF. ENDMETHOD.ENDCLASS.
阅读全文
0 0
- ABAP CALL DB Procedure demo
- C# Call Oracle Procedure Demo(paras Query)
- JDBC Call Store Procedure
- Call a store procedure
- PHPRPC-Remote Procedure Call
- java call procedure
- jdbc call procedure
- JDBC call Stored Procedure
- Remote Procedure Call(RPC)
- Remote Procedure Call
- RPC(Remote procedure call)
- ABAP-Demo
- 都DB的Package procedure
- RPC(Remote procedure call)译文
- PNP : Remote Procedure Call (RPC)
- abap call java
- ABAP demo 程序
- 二 ABAP语法Demo
- 浅谈Vue项目实战(页面渲染+事件绑定)
- 加载场景时调用的函数以及重新加载本场景
- Input.GetAxis
- 快速傅里叶变换FFT总结
- 调优神器VisualVM
- ABAP CALL DB Procedure demo
- ELK日志监控系统搭建
- 360打开网页默认为极速模式
- Android Mvp设计模式结合RxJava+OkHttp+retrofit浅谈
- Fork/join框架
- 机器人如何改变我们的世界
- 仿网易视频列表滚动连播炫酷效果(v3.0 稳定版-终极优化)
- 一个简单的node.js实现界面
- easyui的简单控件使用