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

注:本文的要紧理论内容已经包罗在头里的英特尔P介绍小说: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

因为英特尔P直接运行数据库脚本,所以须求做多少个附加的步子并且会选取到脚本语言(在HANA中即SQL
Script)。稍后在演示部分大家会谈谈陈设的细节。

因而上文介绍的那三种开发技术,大家可以伊始支付一个技能演示了。按本文的例子做下去,你将会可以创制你自己的ABAP
CDS Table Function
,并且为无法直接通过ABAP
CDS达成的急需提供解决方案。为了兑现示例,大家会利用数据库视图SFLIGHTS,这一视图提供了航班连接的底细。

ABAP CDS Table Function

在ABAP CDS Table
Function的付出进度中,大家将字段结构、参数(可选)、association等通过类/方法定义为实体。通过英特尔P大家能够直接在ABAP层写存储进程,并且把它封装在类/方法中,愈来愈多介绍可以看以前的篇章:ABAP中的AMDP(ABAP-Managed
Database Procedures

图片 4

因为英特尔P间接运行数据库脚本,所以必要做多少个附加的步调并且会动用到脚本语言(在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类转换为IntelP类,并且同意在类的法子内写存储进程。

  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

英特尔P的长处之一是您能够将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 瑟维斯s ->
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类转换为英特尔P类,并且同目的在于类的方法内写存储进程。

  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

英特尔P的亮点之一是您可以将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地图