Function介绍与示范

by admin on 2019年11月8日

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

 

正文链接:http://www.cnblogs.com/hhelibeb/p/8057788.html

注:本文的机要理论内容已经满含在事先的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 Table Function

在ABAP CDS Table
Function的支出进度中,大家将字段结构、参数(可选卡塔 尔(英语:State of Qatar)、association等通过类/方法定义为实体。通过英特尔P大家得以从来在ABAP层写存储进程,况兼把它封装在类/方法中,更加多介绍能够看前边的稿子:ABAP中的AMDP(ABAP-Managed
Database Procedures

图片 2

因为英特尔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视图。

开发

展开你的HANA Studio(大概ADT卡塔尔,创造二个新的Core Data Services ->
Data Definitio。

分选project,package并且定义名字和汇报:

图片 3

选用传输央浼,然后点击Next。在模板中选取末了三个筛选“Define Table
Function with Parameters”,然后点击Finish:

图片 4

 编辑生成的实体,满含以下内容:

  • 字段:
    • 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还官样文章。下一步,让大家创造它:

图片 5

让类包蕴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关键字去重,因为大家会找到在差异的连续几天日期的平等的飞行公司的城市记录,如图:

图片 6

英特尔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语句前放叁个RETU奥迪Q5N语句。别的,注意我们将字段名调换为前文中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中的结果:

图片 7

 

希腊语原来的文章:Concatenate multiple records in a single field using ABAP CDS
Table
Function

有一点儿修正

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图