ABAP CDS Table Function介绍与示范。ABAP CDS Table Function介绍及示范。

by admin on 2018年10月5日

Core data services(以下简称CDS)可以指两样东西,一个是HANA
CDS,一个是ABAP CDS。

Core data services(以下简称CDS)可以指两样东西,一个是HANA
CDS,一个是ABAP CDS。

如若我辈所知道,HANA CDS只支持HANA数据库,ABAP
CDS理论上支撑多数据库供应商,结果是,ABAP
CDS相比之下要少一些效。因此,在某些情况下,无法以ABAP
CDS解决问题经常,可以使用同样种变更之方,即通过ABAP Managed Database
Procedures
(AMDP)创建ABAP CDS Table Function

若是我们所掌握,HANA CDS只支持HANA数据库,ABAP
CDS理论上支撑多数据库供应商,结果是,ABAP
CDS相比之下要少一些作用。因此,在某些情况下,无法使ABAP
CDS解决问题经常,可以使相同种植变化之法子,即通过ABAP Managed Database
Procedures
(AMDP)创建ABAP CDS Table Function

 

 

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

正文链接:http://www.cnblogs.com/hhelibeb/p/8057788.html

流动:本文的严重性理论内容曾包含在事先的AMDP介绍文章:ABAP中的AMDP(ABAP-Managed
Database Procedures )
中,相比其,本文更像一个step by step教程。

流淌:本文的主要理论内容早已包含在之前的AMDP介绍文章:ABAP中的AMDP(ABAP-Managed
Database Procedures )
中,相比其,本文更如一个step by step教程。

ABAP CDS视图

以平凡的ABAP
CDS视图开发进程遭到,我们通过编辑器(通常是ADT)在ABAP层声明了咱的字段结构与annotations。激活后,系统会自行地以数额库层生成有的SQL视图。

亚洲必赢手机 1

ABAP
CDS视图提供多种SQL命令和函数的支持,如果您想只要询问细节及全方位底可用特性,建议乃看就篇稿子:ABAP
CDS Feature
Matrix。

ABAP CDS视图

于平凡的ABAP
CDS视图开发过程被,我们通过编辑器(通常是ADT)在ABAP层声明了咱的字段结构及annotations。激活后,系统会自动地以数额库层生成有的SQL视图。

亚洲必赢手机 2

ABAP
CDS视图提供多SQL命令和函数的支撑,如果您想只要了解细节以及周底可用特性,建议你看就篇稿子:ABAP
CDS Feature
Matrix。

ABAP CDS Table Function

每当ABAP CDS Table
Function的开支过程中,我们用字段结构、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们得一直在ABAP层写存储过程,并且把它封装在类/方法中,更多介绍好关押之前的篇章:ABAP中的AMDP(ABAP-Managed
Database Procedures 。

亚洲必赢手机 3

为AMDP直接运行数据库脚本,所以要举行几只附加的步子并且会用到脚本语言(在HANA中虽SQL
Script)。稍后在演示有我们见面讨论部署的底细。

透过上文介绍的马上点儿种植开发技术,我们可开始开发一个艺示范了。按本文的例证做下,你拿会得创建而协调之ABAP
CDS Table Function
,并且也不能够一直通过ABAP
CDS实现的需提供解决方案。为了贯彻示例,我们会动数据库视图SFLIGHTS,这同看图供了航班连接的底细。

ABAP CDS Table Function

于ABAP CDS Table
Function的支付过程中,我们以字段结构、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们可以一直当ABAP层写存储过程,并且把它封装在类/方法中,更多介绍好扣押前面的篇章:ABAP中的AMDP(ABAP-Managed
Database Procedures 。

亚洲必赢手机 4

盖AMDP直接运行数据库脚本,所以需要举行几只附加的步调并且会采用到脚本语言(在HANA中尽管SQL
Script)。稍后在演示有我们会谈论配备的细节。

经过上文介绍的当下片种开发技术,我们得起开发一个艺示范了。按本文的例证做下去,你用会见得以创建而协调的ABAP
CDS Table Function
,并且为无能够一直通过ABAP
CDS实现之需求提供解决方案。为了促成示例,我们会以数据库视图SFLIGHTS,这等同目图供了航班连接的底细。

场景

每个航空企业提供世界上不同城市之航班连接,用户想使当单一字段中看到某个平等一定航空企业支持之兼具都,内容因逗号分隔。因为每家航空企业之市数是不同之,我们用一个逻辑来拼接城市等,无论发询问结果小条数。

以常规的ABAP
CDS内我们可行使CONCAT函数,但是利用它们的时刻,我们需要定义固定数量之字段,既然CDS视图不能够兑现此需要的拍卖动态逻辑,要怎么样处理呢?

马上是一个行使ABAP CDS Table
Function的绝佳场景,因为咱们得应用简易的数据库函数STRING_AGG(String
Aggregation)。这个意义在SQL Script中可用,但是当前还是未支持ABAP
CDS视图。

场景

每个航空企业提供世界上差城市之航班连接,用户想使当单一字段中观看某个平等一定航空企业支持之持有都,内容因逗号分隔。因为每家航空企业之都会数是不同之,我们用一个逻辑来拼接城市等,无论发询问结果小条数。

当正规的ABAP
CDS内我们好行使CONCAT函数,但是利用它们的时,我们需要定义固定数量之字段,既然CDS视图不能够兑现此需要的拍卖动态逻辑,要怎么样处理也?

眼看是一个使用ABAP CDS Table
Function的绝佳场景,因为咱们得以应用简易的数据库函数STRING_AGG(String
Aggregation)。这个意义在SQL Script中可用,但是当前还是免支持ABAP
CDS视图。

开发

开辟你的HANA Studio(或者ADT),创建一个初的Core Data Services ->
Data Definitio。

慎选project,package并且定义名字与描述:

亚洲必赢手机 5

挑选传输请求,然后点击Next。在模板被挑选最后一个挑选“Define Table
Function with Parameters”,然后点击Finish:

亚洲必赢手机 6

 编辑生成的实体,包含以下内容:

  • 字段:
    • Client
    • Airline Code
    • Airline Name
    • Cities To
  • :
    ZCL_FLIGHTS_DEMO_CDS
  • 方法:
    FLIGHTS_CONNECTIONS

结果当是:

define table function ZDEMO_FLIGHTS_TABLE_FUNCTION
returns
{
  client       : abap.clnt;
  airline_code : s_carr_id;
  airline_name : s_carrname;
  cities_to    : abap.string;
}
implemented by method
  ZCL_FLIGHTS_DEMO_CDS=>FLIGHTS_CONNECTIONS;

 当然,现在ZCL_FLIGHTS_DEMO_CDS还不在。下一样步,让咱们创建它:

亚洲必赢手机 7

让类包含IF_AMDP_MARKER_HDB接口。这同样步会把你的ABAP类转换为AMDP类,并且同意在类的章程外写存储过程。

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

当方实现着我们得引入某些配置选:

  • BY DATABASE FUNCTION: 会将计标记为table
    function,还有一个选择是经过 BY DATABASE
    PROCEDURE
    符为存储过程.
  • FOR HDB: 设定数据库类型为HDB (HANA数据库).
  • LANGUAGE SQLSCRIPT: HANA数据库存储的语言.
  • OPTIONS READ-ONLY: 存储过程外不允修改数据.
  • USING: 定义table
    function中花的数额库表、视图或者存储过程。在本例中,只看SFLIGHTS
    视图.

    METHOD flights_connections

    BY DATABASE FUNCTION
    FOR HDB
    LANGUAGE SQLSCRIPT
    OPTIONS READ-ONLY
    USING sflights.
    
    <<你的代码>>
    

    ENDMETHOD.

吃咱们准备好查询分割逻辑的鲜单SELECT语句。

第一独SLECT需要获得Client, Airline Code, Airline Name和City
To字段,并由此DISTINCT关键字去再,因为我们见面找到以不同之连日日期的等同的飞行企业的市记录,如图:

亚洲必赢手机 8

AMDP的独到之处之一是若得拿SELECT的查询结果传输至“内表”,并且可尽新的SELECT来读取它的多少。让咱应用这同样功效的长,并且将第一个SELECT的口舌的询问结果命名为itab_cities.

    itab_cities =
      SELECT DISTINCT 
             sflights.mandt    as client,
             sflights.carrid   as airline_code,
             sflights.carrname as airline_name,
             sflights.cityto   as city_to
        FROM sflights;

当第二只SELECT中,我们只要于itab_cities吃读取数据并且实现数据库方法STRING_AGG来集多单城市与航空企业。为了贯彻就等同意义我们用基于Client,Airline
Code和Name字段GROUP BY条目。写法是:

    RETURN
      SELECT client,
             airline_code,
             airline_name,
             STRING_AGG(city_to, ', ' ORDER BY city_to) as cities_to
        FROM :itab_cities
       GROUP BY client,
                airline_code,
                airline_name;

注意:table
function应永久有归参数,所以记在以最终一个SELECT语句前放一个RETURN语句。另外,注意我们以许段名转换为眼前文中ABAP
CDS Table
Function声明的字段名,如果你没提供一个适合的号,激活的上编译器会受有提示。

 

ZCL_FLIGHTS_DEMO_CDS的末尾版是这么的:

CLASS zcl_flights_demo_cds DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

    CLASS-METHODS:
      flights_connections FOR TABLE FUNCTION zdemo_flights_table_function.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_flights_demo_cds IMPLEMENTATION.

  METHOD flights_connections
    BY DATABASE FUNCTION
    FOR HDB
    LANGUAGE SQLSCRIPT
    OPTIONS READ-ONLY
    USING sflights.

    itab_cities =
      SELECT DISTINCT 
             sflights.mandt    as client,
             sflights.carrid   as airline_code,
             sflights.carrname as airline_name,
             sflights.cityto   as city_to
        FROM sflights;

    RETURN
      SELECT client,
             airline_code,
             airline_name,
             STRING_AGG(city_to, ', ' ORDER BY city_to) as cities_to
        FROM :itab_cities
       GROUP BY client,
                airline_code,
                airline_name;

  ENDMETHOD.

ENDCLASS.

在Data Preview中的结果:

亚洲必赢手机 9

 

英文原文:Concatenate multiple records in a single field using ABAP CDS
Table
Function
有三三两两改动

开发

开辟你的HANA Studio(或者ADT),创建一个新的Core Data Services ->
Data Definitio。

择project,package并且定义名字和讲述:

亚洲必赢手机 10

分选传输请求,然后点击Next。在模板被挑选最后一个选“Define Table
Function with Parameters”,然后点击Finish:

亚洲必赢手机 11

 编辑生成的实体,包含以下内容:

  • 字段:
    • Client
    • Airline Code
    • Airline Name
    • Cities To
  • :
    ZCL_FLIGHTS_DEMO_CDS
  • 方法:
    FLIGHTS_CONNECTIONS

结果应当是:

define table function ZDEMO_FLIGHTS_TABLE_FUNCTION
returns
{
  client       : abap.clnt;
  airline_code : s_carr_id;
  airline_name : s_carrname;
  cities_to    : abap.string;
}
implemented by method
  ZCL_FLIGHTS_DEMO_CDS=>FLIGHTS_CONNECTIONS;

 当然,现在ZCL_FLIGHTS_DEMO_CDS还无有。下一致步,让咱们创建它:

亚洲必赢手机 12

让类包含IF_AMDP_MARKER_HDB接口。这同一步会管你的ABAP类转换为AMDP类,并且同意在类的不二法门外写存储过程。

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

每当道实现着我们用引入某些配置选:

  • BY DATABASE FUNCTION: 会将计标记为table
    function,还有一个拣是经 BY DATABASE
    PROCEDURE
    记为存储过程.
  • FOR HDB: 设定数据库类型也HDB (HANA数据库).
  • LANGUAGE SQLSCRIPT: HANA数据库存储的语言.
  • OPTIONS READ-ONLY: 存储过程外无容许修改数据.
  • USING: 定义table
    function中花之数据库表、视图或者存储过程。在本例中,只看SFLIGHTS
    视图.

    METHOD flights_connections

    BY DATABASE FUNCTION
    FOR HDB
    LANGUAGE SQLSCRIPT
    OPTIONS READ-ONLY
    USING sflights.
    
    <<你的代码>>
    

    ENDMETHOD.

深受咱们准备好查询分割逻辑的片独SELECT语句。

首先单SLECT需要得到Client, Airline Code, Airline Name和City
To字段,并经过DISTINCT关键字去还,因为我们会找到以不同之总是日期的一样的航空企业之都市记录,如图:

亚洲必赢手机 13

AMDP的亮点之一是你得以SELECT的询问结果传输至“内表”,并且可以实行新的SELECT来读取它的数据。让咱用即同一功力的长,并且以首先只SELECT的言语的查询结果命名为itab_cities.

    itab_cities =
      SELECT DISTINCT 
             sflights.mandt    as client,
             sflights.carrid   as airline_code,
             sflights.carrname as airline_name,
             sflights.cityto   as city_to
        FROM sflights;

每当其次个SELECT中,我们只要从itab_cities着读取数据并且实现数据库方法STRING_AGG来集多独都市及飞行企业。为了落实这无异功能我们需要基于Client,Airline
Code和Name字段GROUP BY条目。写法是:

    RETURN
      SELECT client,
             airline_code,
             airline_name,
             STRING_AGG(city_to, ', ' ORDER BY city_to) as cities_to
        FROM :itab_cities
       GROUP BY client,
                airline_code,
                airline_name;

注意:table
function应永久有归参数,所以记着在终极一个SELECT语句前放一个RETURN语句。另外,注意我们拿许段名转换为眼前文中ABAP
CDS Table
Function声明的许段名,如果你没提供一个恰如其分的号,激活的早晚编译器会让出提示。

 

ZCL_FLIGHTS_DEMO_CDS的尾声版是这般的:

CLASS zcl_flights_demo_cds DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES if_amdp_marker_hdb.

    CLASS-METHODS:
      flights_connections FOR TABLE FUNCTION zdemo_flights_table_function.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_flights_demo_cds IMPLEMENTATION.

  METHOD flights_connections
    BY DATABASE FUNCTION
    FOR HDB
    LANGUAGE SQLSCRIPT
    OPTIONS READ-ONLY
    USING sflights.

    itab_cities =
      SELECT DISTINCT 
             sflights.mandt    as client,
             sflights.carrid   as airline_code,
             sflights.carrname as airline_name,
             sflights.cityto   as city_to
        FROM sflights;

    RETURN
      SELECT client,
             airline_code,
             airline_name,
             STRING_AGG(city_to, ', ' ORDER BY city_to) as cities_to
        FROM :itab_cities
       GROUP BY client,
                airline_code,
                airline_name;

  ENDMETHOD.

ENDCLASS.

于Data Preview中的结果:

亚洲必赢手机 14

 

英文原文:Concatenate multiple records in a single field using ABAP CDS
Table
Function
有星星点点改动

发表评论

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

网站地图xml地图