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
有点儿改动