ABAP处理下的数据仓库储存款和储蓄进度(ABAP-Managed Database
Procedure,以下简单称谓IntelP)是在APAP on SAP
HANA开采中的风华正茂种优化方式。英特尔P使用数据库语言书写,举例Native
SQL只怕是SQL
Script,并且在AMDP类的AMDP方法内达成。由此用它支付数据仓库储存款和储蓄进度就有一点点相像于编辑ABAP类。
归纳,英特尔P允许开拓者间接在ABAP中写数据仓库储存款和储蓄进程。
正文链接:http://www.cnblogs.com/hhelibeb/p/7976533.html
转发请注解
何以采纳英特尔P?
按SAP的官方提出,在能够利用Open
SQL实现内需的作用或优化目的的时候,不提议使用英特尔P。而在要求动用Open
SQL不设有的表征,或然是大批量管理流和解析招致了数据库和应用服务器之间有再次的恢宏数目传输的情况下,则应当接收IntelP。
实际的例证能够看看:AMDP, Comparison of SQLScript with Open
SQL
,
SAP HANA, Currency Conversion with
SQLScript
英特尔P仍然是能够提供以下好处:
- SQL Script的静态代码检查
- 语法高亮(援救pretty printer格式优化器)
- 在英特尔P内访谈此外英特尔P方法、ABAP字典的视图和表
- 能够像普通的ABAP方法意气风发致调用(不饱含AMDP function)
- 运用ST22进行运营时不当的详细解析
介绍视频:
语法
IntelP在英特尔P类中落到实处,必要三个规范的静态方法也许实例方法,可知性率性:
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.
IntelP类正是普通的类,并完结IF_AMDP_MARKER_<DB_TYPE>接口。如若是HANA数据库,那么正是贯彻接口IF_AMDP_MARKER_HDB。不过,尽管条件上英特尔P是为着扶持各类数据库的累积进度而存在的,但到眼下(ABAP
7.52)截至,英特尔P只援救SAP
HANA数据库。能够动用类CL_ABAP_DBFEATURES中的常量CALL_AMDP_METHOD来认同IntelP对当下数据库的支撑。
简单易行示例
示例类CL_DEMO_AMDP_SCASportage奥迪Q5绑定了接口IF_AMDP_MARKER_HDB,并且带有英特尔P方法SELECT_SCATiggo帕Ramela来从表SCALacrosse奥迪Q5中获取数据(笔者近期从未对应的条件,所以写了个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是三个英特尔P
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是三个英特尔P
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异常
IntelP
procedure实现的百般名前缀是CX_英特尔P。那个特别都在目录CX_DYNAMIC_CHECK之下,必得运用RASING显式地在英特尔P
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未有那些类。
工具扶植
英特尔P在SAP NetWeaver AS ABAP 7.40
SP05版本中被引进。唯有基于Eclipse的开采工具(即ADT,版本要不低于2.19)才支撑IntelP的编写,SAP
GUI上面包车型客车SE80是不提供编辑成效的,只可以用来阅读代码。
有关AMDP调试的录像教程:
总结
选拔ABAP Managed Database Procedure(IntelP卡塔尔和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
别的材质: