大红鹰葡京会ABAP CDS Table Function介绍和示范。ABAP CDS Table Function介绍与示范。

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
有少改动

相关文章

admin

网站地图xml地图