ABAP中的AMDP(ABAP-Managed Database Procedures )

作者简介

埃莱娜·费兰特,近日意大利最受欢迎也最神秘的女作家。埃莱娜·费兰特是一个笔名,其忠实身份至今是谜。

埃莱娜·费兰特1992年刊登第一委员长篇小说《讨厌的爱》,很快引起关注,1995年就被意大利导演马里奥·马尔托内视频为同名电影;此后他相继出版随笔《被丢掉的光阴》(2002)
、《迷失的丫头》(2006)、《夜晚的沙滩》(2007)和小说、访谈集《不确定的散装》(2003)。

二零一一年至2014年,埃莱娜·费兰特以每年一本的效用出版《我的天才女友》《新名字的故事》《离开的,留下的》和《失踪的男女》这四部内容有关的小说,被号称“这不勒斯四部曲”。它们以史诗般的体例,描述了六个在这不勒斯穷困社区诞生的女孩不停半个世纪的交情。

“这不勒斯四部曲”也在世界范围内引发了“费兰特热”,千万读者为书中对女性友谊极其真实、尖锐、毫不粉饰的描述所感动。即便作者没有公开其性别,但媒体和评论家从其“自传性”色彩显明的行文中判断其为女性。2015年,埃莱娜·费兰特被《金融时报》评为“年度女性”。2016年,《时代》周刊将埃莱娜·费兰特选入“最具影响力的100位戏剧家”。

图片 1

埃莱娜·费兰特个人独照。    图片源于网络 

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

《我的天才女友》——这不勒斯四部曲-01

AMDP方法

IntelP方法有二种实现,一种是AMDP
procedure
心想事成;另一种是AMDP
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介绍与示范

 

经典语录

“我写的那个天真无邪的东西,这么些夸张、轻浮虚假的欢欣,还有做作的语调真让自己脸红,不知晓莉拉是怎么评价我的。我对杰拉切先生也发出了蔑视和恼怒,因为他给自己的语文打了九分,这让自己爆发了幻觉。在自身十五岁华诞这天,这封信发出的首先个结果就是让自身感觉自己是一个骗子。对于我来说,高校失去了光环,证据就在这里——在莉拉的信里。”

简易示例

示例类CL_DEMO_AMDP_SCARR绑定了接口IF_AMDP_MARKER_HDB,并且带有AMDP方法SELECT_SCARR来从表SCARR中获取数据(笔者近来并未对号入座的环境,所以写了个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 ). 

体育场馆暂无藏书(已可按图索骥,可能为订购中或处理中)

怎么使用IntelP?

按SAP的官方提议,在可以行使Open
SQL实现内需的效能或优化目的的时候,不指出采纳IntelP。而在急需采取Open
SQL不设有的表征,或者是大度处理流和分析导致了数据库和应用服务器之间有再次的大量数目传输的情形下,则应该接纳IntelP。

具体的例子可以看看:AMDP, Comparison of SQLScript with Open
SQL

,

          SAP HANA, Currency Conversion with
SQLScript

   

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

  • SQL Script的静态代码检查
  • 语法高亮(援助pretty printer格式优化器) 
  • 在IntelP内访问另外AMDP方法、ABAP字典的视图和表 
  • 可以像一般的ABAP方法同样调用(不包括IntelP function)  
  • 使用ST22举办运行时不当的详细分析    

介绍视频

图片 2

ABAP管理下的数据库存储过程(ABAP-Managed Database
Procedure,以下简称IntelP)是在APAP on SAP
HANA开发中的一种优化形式。AMDP使用数据库语言书写,比如Native
SQL或者是SQL
Script,并且在AMDP类的英特尔P方法内实现。因而用它支付数据库存储过程就有点类似于编辑ABAP类。

充足阶段一贯都是这般。我快捷发现:我一个人,无论做其他工作都没办法心绪澎拜,只有莉拉触及的事体,才会变得首要。倘诺他离家、远离了我所做的政工,这么些事就会沾染污垢,落满灰尘:中学、拉丁语、老师和书本,我以为书上的文字远没有加工一个鞋子迷人,这让自身很苦闷。——埃莱娜·费兰特    《我的天才女友》

AMDP异常

AMDP
procedure实现的百般名前缀是CX_IntelP。这些特别都在目录CX_DYNAMIC_CHECK之下,必须使用RASING显式地在AMDP
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没有分外类。

媒体评价

费兰特将多少个贫困的城市女孩之间的爱、分离和重逢,铸造成她们居住的卓殊城市的喜剧。

——《伦敦时报》

埃莱娜·格雷科是一个幸存者,她非得从这多少个依附和脱皮的戏剧顶牛中,让投机现有下来。她带着一种幸存者的惭愧,就类似她是从莉拉的聚宝盆盗取了对财富的承诺。

——《纽约客》

和索福克勒斯或者奥维德一样,费兰特处理的也是天意的题材。莉拉是一个天公,一个神话般的人物。

——《印度洋月刊》

焦虑、疲惫、女性经期……费兰特探索了具备大家提心吊胆的问题。费兰特笔下的女性们切肤地体会了被废除、不公和险恶的情义——那几个不再是被看作弱点、而被看作一种事实来看待。

——《新共和》

和卡夫卡一样,费兰特将他的东家的内心世界揭示得放眼。

——《卫报》

《我的天才女友》是一部单声道(而非双声道)的成长小说;大家从很已经发现到,莉拉还困在祥和的社会风气里,而作者,埃莱娜则会脱皮这个世界。

——《泰晤士管文学增刊》

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( ).

 

下边这一个事例访问的AMDP
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.

 

也得以将IntelP function实现为CDS table function。这里就不贴示例了。

 

有关AMDP实现的录像教程

出版社:人民农学出版社

工具补助

AMDP在SAP NetWeaver AS ABAP 7.40
SP05版本中被引入。只有基于Eclipse的开发工具(即ADT,版本要不低于2.19)才支撑AMDP的编排,SAP
GUI下面的SE80是不提供编辑效能的,只好用来阅读代码。

有关AMDP调试的录像教程

出版年:2017

语法

AMDP在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.

AMDP类就是平凡的类,并实现IF_AMDP_MARKER_<DB_TYPE>接口。假使是HANA数据库,那么就是促成接口IF_AMDP_MARKER_HDB。然而,就算条件上AMDP是为了帮助各样数据库的储存过程而存在的,但到当下(ABAP
7.52)截止,英特尔P只襄助SAP
HANA数据库。可以使用类CL_ABAP_DBFEATURES中的常量CALL_AMDP_METHOD来认同IntelP对眼前数据库的支撑。

编辑感想

“六个巾帼,五十年的情分和战火。”这句话深深地掀起了自我连续深切阅读。友谊与战争,其实这两样何曾不是同时存在的呢?在互助中提高,进步中奋斗,我们的家常大概也是如此的吧。而这三个女人的友谊与战事又是怎样的吗?令人不禁想打听,想研究书中的故事情节,跟随埃莱娜·费兰特进入他们的社会风气。

文字编辑:青年记者站——梁晓欣

AMDP procedure实现

急需选用Method语句的附加项BY DATABASE
PROCEDURE。例子见上文。那种实现形式写成的办法和普通的ABAP对象方法在应用形式上没区别。

作者:埃莱娜·费兰特

 

内容简介

唯有你身为妇女才会分晓这么些难看的心腹

多少个女孩子,50年的情谊和战火

过去五年,几乎所有欧美读者都在座谈她、

全球畅销百万册 被翻译成40种语言

《金融时报》2015寒暑女性

2016《时代》周刊“世界最有影响力的100人”

希Larry·Clinton、 乔纳森(乔纳森)·弗兰岑、詹姆斯(詹姆士)·伍德、詹姆斯(詹姆斯(James))·弗兰科都是她的粉丝


《我的天才女友》是埃莱娜·费兰特“这不勒斯四部曲”的首先部,讲述了两个女主人公莉拉和埃莱娜的少女时代。故事一最先,已经成功的埃莱娜接到莉拉外孙子里诺的对讲机,说他姑姑彻底消失了。埃莱娜想起莉拉对团结命局的预言,于是他写下她们一生的故事……

莉拉和埃莱娜一起成人于这不勒斯一个破败的社区,从小形影不离,相互信任,但又都视对方为协调隐瞒的眼镜,暗暗角力。

莉拉聪明,漂亮。她可以毫不畏惧地和欺负自己的男生对质,也得以去找人人惧怕的阿奇勒﹒蒙特利尔要回被她夺走的玩具;埃莱娜既羡慕莉拉的学习天赋和优异的决断力,又径直秘而不宣模仿莉拉。

家属不协理莉拉继续上学,因而她到四叔和兄长苦苦维持的修鞋店帮工,又面临多少个纨绔子弟的求偶。埃莱娜则怀着对朋友的敬服、嫉妒和透亮,独自继续学业,却一直不可以面对和莉拉竞争的失落。

最后,十六岁的莉拉决定嫁给肉食店老总,但在婚宴上,她发觉了丈夫的反叛。而埃莱娜也站在成人世界的进口,既为前途堪忧,也因对思想时髦的尼诺暴发模糊好感而裹足不前。

大概,AMDP允许开发者直接在ABAP中写数据库存储过程。

转载请表明

发表评论

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

网站地图xml地图