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视图。

lovebet体育官网 1

ABAP
CDS视图提供多SQL命令和函数的支撑,如果您想如果询问细节及整个之可用特性,建议乃看这首文章:ABAP
CDS Feature
Matrix。

ABAP CDS视图

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

lovebet体育官网 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 。

lovebet体育官网 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 。

lovebet体育官网 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并且定义名字和讲述:

lovebet体育官网 5

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

lovebet体育官网 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还未设有。下同样步,让咱创建它:

lovebet体育官网 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关键字去又,因为咱们会找到在不同的连续日期的同一之飞企业之都记录,如图:

lovebet体育官网 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中之结果:

lovebet体育官网 9

 

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

开发

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

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

lovebet体育官网 10

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

lovebet体育官网 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还无有。下一致步,让咱们创建它:

lovebet体育官网 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关键字去又,因为我们见面找到以不同之总是日期的平的航空企业之都会记录,如图:

lovebet体育官网 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遭受读取数据lovebet体育官网并且实现数据库方法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中的结果:

lovebet体育官网 14

 

英文原文:Concatenate multiple records in a single field using ABAP CDS
Table
Function
有一定量改动

相关文章