ABAP中的速龙P(ABAP-Managed Database Procedures )

by admin on 2019年2月26日

ABAP管理下的数据仓库储存款和储蓄进度(ABAP-Managed Database
Procedure,以下简称速龙P)是在APAP on SAP
HANA开发中的一种优化情势。速龙P使用数据库语言书写,比如Native
SQL大概是SQL
Script,并且在速龙P类的英特尔P方法内完结。因而用它开发数据仓库储存款和储蓄进度就有点类似于编辑ABAP类。

ABAP管理下的数据库存款和储蓄进度(ABAP-Managed Database
Procedure,以下简称英特尔P)是在APAP on SAP
HANA开发中的一种优化形式。AMDP使用数据库语言书写,比如Native
SQL可能是SQL
Script,并且在英特尔P类的英特尔P方法内完成。由此用它支付数据仓库储存款和储蓄过程就有点类似于编辑ABAP类。

简易,英特尔P允许开发者间接在ABAP中写数据仓库储存款和储蓄进度。

简简单单,AMDP允许开发者间接在ABAP中写数据仓库储存款和储蓄进度。

 

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7976533.html

本文链接: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

   

英特尔P还是能提供以下好处:

  • SQL Script的静态代码检查
  • 语法高亮(协理pretty printer格式优化器) 
  • 在英特尔P内访问其余英特尔P方法、ABAP字典的视图和表 
  • 能够像平时的ABAP方法一致调用(不包含AMDP function)  
  • 选择ST22实行启动时不当的详细分析    

介绍视频

为什么使用速龙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格式优化器) 
  • 在英特尔P内访问其余AMDP方法、ABAP字典的视图和表 
  • 能够像一般的ABAP方法一致调用(不包括AMDP function)  
  • 选拔ST22实行运作时不当的详细分析    

介绍视频

语法

AMDP在英特尔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.

英特尔P类便是日常的类,并促成IF_AMDP_MARKER_<DB_TYPE>接口。假诺是HANA数据库,那么正是兑现接口IF_AMDP_MARKER_HDB。可是,就算条件上速龙P是为了协助种种数据库的蕴藏进度而存在的,但到当下(ABAP
7.52)结束,速龙P只帮助SAP
HANA数据库。能够运用类CL_ABAP_DBFEATURES中的常量CALL_AMDP_METHOD来确认AMDP对脚下数据库的协助。

语法

速龙P在速龙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.

英特尔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_SCAPAJERO奥迪Q5绑定了接口IF_AMDP_MARKER_HDB,并且蕴涵英特尔P方法SELECT_SCA凯雷德R来从表SCA普拉多奥德赛前获取数据(小编目前从未有过相应的条件,所以写了个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 ). 

简易示例

示例类CL_DEMO_AMDP_SCA奥德赛PAJERO绑定了接口IF_AMDP_MARKER_HDB,并且包涵AMDP方法SELECT_SCA福特ExplorerPAJERO来从表SCALX570君越中获取数据(作者最近一直不对号入座的条件,所以写了个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方法

英特尔P方法有三种落成,一种是AMDP
procedure
金玉锦绣;另一种是AMDP
function
实现。

AMDP procedure实现

急需选用Method语句的增大项BY DATABASE
PROCEDURE。例子见上文。那种完成格局写成的方法和常见的ABAP对象方法在使用方式上没不一样。

AMDP procedure实现

内需使用Method语句的叠加项BY DATABASE
PROCEDURE。例子见上文。那种完毕方式写成的措施和一般性的ABAP对象方法在选拔方法上没分别。

AMDP function实现

亟需利用Method语句的叠加项BY DATABASE
FUNCTION。它将英特尔P方法完结为一个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是1个英特尔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是3个英特尔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 function实现

亟需运用Method语句的叠加项BY DATABASE
FUNCTION。它将英特尔P方法实现为叁个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是1个速龙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异常

英特尔P
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没有12分类。

AMDP异常

英特尔P
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

只顾:AMDP
function没有尤其类。

工具帮助

英特尔P在SAP NetWeaver AS ABAP 7.40
SP05版本中被引入。只有基于Eclipse的开发工具(即ADT,版本要不低于2.19)才支撑英特尔P的编写制定,SAP
GUI上面的SE80是不提供编辑作用的,只可以用来阅读代码。

有关AMDP调试的录像教程

工具辅助

英特尔P在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

任何质地:

SAP HANA SQL Script
Reference

ABAP CDS Table
Function介绍与示范

 

总结

选择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

其他材料:

SAP HANA SQL Script
Reference

ABAP CDS Table
Function介绍与示范

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图