ABAP中的AMDP(ABAP-Managed Database Procedures )
ABAP管理下的数据仓库储存款和储蓄进度(ABAP-Managed Database
Procedure,以下简单称谓英特尔P)是在APAP on SAP
HANA开拓中的风华正茂种优化格局。英特尔P使用数据库语言书写,比方Native
SQL大概是SQL
Script,而且在IntelP类的英特尔P方法内完成。因而用它支付数据仓库储存储进程就有一些相近于编辑ABAP类。
简易,AMDP允许开垦者直接在ABAP中写数据仓库储存款和储蓄进程。
正文链接:http://www.cnblogs.com/hhelibeb/p/7976533.html
转发请注明
缘何选取英特尔P?
按SAP的法定提出,在能够利用Open
SQL实现内需的功用或优化目的的时候,不建议使用英特尔P。而在须要使用Open
SQL不设有的性情,或许是大批量管理流和剖析引致了数据库和应用服务器之间有重复的恢宏数额传输的气象下,则应当接受英特尔P。
切切实实的例证能够看看:AMDP, Comparison of SQLScript with Open
SQL
,
SAP HANA, Currency Conversion with
SQLScript
AMDP还是能够提供以下好处:
- SQL Script的静态代码检查
- 语法高亮(协理pretty printer格式优化器)
- 在AMDP内访谈别的英特尔P方法、ABAP字典的视图和表
- 能够像日常的ABAP方法肖似调用(不富含速龙P function)
- 行使ST22举行运作时不当的详细剖判
介绍视频:
语法
IntelP在AMDP类中落到实处,要求叁个正经的静态方法可能实例方法,可知性任性:
CLASS <my_amdp_class> DEFINITION.
PUBLIC SECTION.
* 指定的Marker接口
INTERFACES IF_AMDP_MARKER_<DB_TYPE>.
...
METHODS <my_amdp_method>.
...
ENDCLASS.
CLASS <my_amdp_class> IMPLEMENTATION.
...
* AMDP 方法
METHOD <my_amdp_method> BY DATABASE PROCEDURE
FOR <db_type>
LANGUAGE <db_language>
OPTIONS <db_options>
USING <db_entity>.
"使用数据库语言实现存储过程
...
ENDMETHOD.
...
ENDCLASS.
英特尔P类正是习见的类,并落到实处IF_AMDP_MARKER_<DB_TYPE>接口。借使是HANA数据库,那么便是贯彻接口IF_AMDP_MARKER_HDB。可是,即便标准上英特尔P是为了扶持种种数据库的积存进程而存在的,但到当前(ABAP
7.52)甘休,英特尔P只扶植SAP
HANA数据库。可以采纳类CL_ABAP_DBFEATURES中的常量CALL_AMDP_METHOD来确认英特尔P对目前数据库的帮忙。
简轻巧单示例
示例类CL_DEMO_AMDP_SCAENCORELAND绑定了接口IF_AMDP_MARKER_HDB,并且包罗IntelP方法SELECT_SCALX570福特Explorer来从表SCARMurano中获取数据(小编近日从未对应的情形,所以写了个ztest_amdp来代替示例):
CLASS ztest_amdp DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb.
CLASS-DATA: scarr_tab TYPE ty_scarr.
METHODS select_scarr IMPORTING VALUE(clnt) TYPE mandt
EXPORTING VALUE(scarr_tab) TYPE ty_scarr.
ENDCLASS.
CLASS ztest_amdp IMPLEMENTATION.
METHOD select_scarr
BY DATABASE PROCEDURE FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING scarr.
scarr_tab =
SELECT *
FROM "SCARR"
WHERE mandt = clnt
ORDER BY carrid;
ENDMETHOD.
ENDCLASS.
以下代码可以用来调用方法、获取结果:
DATA result TYPE ty_scarr.
NEW ztest_amdp( )->select_scarr(
EXPORTING clnt = sy-mandt
IMPORTING scarr_tab = result ).
cl_demo_output=>display( result ).
AMDP方法
英特尔P方法有二种达成,后生可畏种是AMDP
procedure达成;另豆蔻梢头种是AMDP
function实现。
AMDP procedure实现
内需利用Method语句的叠合项BY DATABASE
PROCEDURE。例子见上文。这种完成方式写成的形式和见惯司空的ABAP对象方法在使用办法上没差别。
AMDP function实现
须求接收Method语句的增大项BY DATABASE
FUNCTION。它将AMDP方法达成为贰个table function。
tips: table function
table function是只读的用户定义的方法,可以接收多个输入参数。接收单一的表返回值。 在SQL Scitpt中,table function可以在与数据库表或者视图相同的位置使用。 |
演示代码:
REPORT demo_amdp_functions_inpcl.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
IF NOT cl_abap_dbfeatures=>use_features(
EXPORTING
requested_features =
VALUE #( ( cl_abap_dbfeatures=>call_amdp_method )
( cl_abap_dbfeatures=>amdp_table_function ) ) ).
cl_demo_output=>display(
`System does not support AMDP or CDS table functions` ).
RETURN.
ENDIF.
DATA carrid TYPE s_carr_id VALUE 'LH'.
cl_demo_input=>request( CHANGING field = carrid ).
carrid = to_upper( carrid ).
"Database function selected in database procedure
TRY.
NEW cl_demo_amdp_functions_inpcl( )->select_get_scarr_spfli(
EXPORTING clnt = sy-mandt
carrid = carrid
IMPORTING scarr_spfli_tab = DATA(result1) ).
CATCH cx_amdp_error INTO DATA(amdp_error).
cl_demo_output=>display( amdp_error->get_text( ) ).
RETURN.
ENDTRY.
cl_demo_output=>display( result1 ).
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).
地方这么些事例访问的英特尔P
function能够在类CL_DEMO_AMDP_FUNCTIONS_INPCL中看到。
方法GET_SCARR_SPFLI是壹个AMDP
function完毕,它是不可能一贯在ABAP中访谈的:
METHOD get_scarr_spfli BY DATABASE FUNCTION FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING scarr spfli.
RETURN SELECT sc.carrname, sp.connid, sp.cityfrom, sp.cityto
FROM scarr AS sc
INNER JOIN spfli AS sp ON sc.mandt = sp.mandt AND
sc.carrid = sp.carrid
WHERE sp.mandt = :clnt AND sp.carrid = :carrid
ORDER BY sc.mandt, sc.carrname, sp.connid;
ENDMETHOD.
而方法SELECT_GET_SCARR_SPFLI是八个AMDP
procedure完成,它使用select从上边的function落成中获取数据。代码如下:
METHOD select_get_scarr_spfli
BY DATABASE PROCEDURE FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING cl_demo_amdp_functions_inpcl=>get_scarr_spfli.
SCARR_SPFLI_TAB =
SELECT *
FROM "CL_DEMO_AMDP_FUNCTIONS_INPCL=>GET_SCARR_SPFLI"(
clnt => :clnt,
carrid => :carrid );
ENDMETHOD.
也足以将英特尔P function完结为CDS table function。这里就不贴示例了。
有关AMDP实现的摄像教程:
AMDP异常
AMDP
procedure完结的不得了名前缀是CX_AMDP。那么些非常都在目录CX_DYNAMIC_CHECK之下,必得选拔RASING显式地在IntelP
procedure完成的概念中声称。
CX_ROOT
|
|–CX_DYNAMIC_CHECK
|
|–CX_AMDP_ERROR
|
|–CX_AMDP_VERSION_ERROR
| |
| |–CX_AMDP_VERSION_MISMATCH
|
|–CX_AMDP_CREATION_ERROR
| |
| |–CX_AMDP_CDS_CLIENT_MISMATCH
| |
| |–CX_AMDP_DBPROC_GENERATE_FAILED
| |
| |–CX_AMDP_DBPROC_CREATE_FAILED
| |
| |–CX_AMDP_NATIVE_DBCALL_FAILED
| |
| |–CX_AMDP_WRONG_DBSYS
|
|–CX_AMDP_EXECUTION_ERROR
| |
| |–CX_AMDP_EXECUTION_FAILED
| |
| |–CX_AMDP_IMPORT_TABLE_ERROR
| |
| |–CX_AMDP_RESULT_TABLE_ERROR
|
|–CX_AMDP_CONNECTION_ERROR
|
|–CX_AMDP_NO_CONNECTION
|
|–CX_AMDP_NO_CONNECTION_FOR_CALL
|
|–CX_AMDP_WRONG_CONNECTION
留心:英特尔P
function未有充足类。
工具接济
AMDP在SAP NetWeaver AS ABAP 7.40
SP05版本中被引进。独有基于Eclipse的开荒工具(即ADT,版本要不低于2.19)才支撑英特尔P的编辑撰写,SAP
GUI下面的SE80是不提供编辑功效的,只好用来读书代码。
有关AMDP调试的录制教程:
总结
动用ABAP Managed Database Procedure(英特尔P卡塔尔(قطر和CDS开采,归于自上而下的ABAP
for
HANA开辟情势。在接纳层即ABAP程序中管理数据总括逻辑和建模,激活后会在HANA中创立相应的数据库对象。相比较于旧有的Database
Procedure Proxy,英特尔P提供了简便易行的调用SQL Script等数据库语言的主意。
参照文章:
[1] AMDP – ABAP Managed Database
Procedures
[2] ABAP Managed Database Procedures –
Introduction
[3] ABAP Development for SAP
HANA
[4] How to use AMDP Function implementation for a CDS Table Function
as a data source in CDS
views
其余资料:
发表评论