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地图