Function介绍与示范

注:本文的主要性理论内容早就饱含在事情未发生前的英特尔P介绍随笔:ABAP中的AMDP(ABAP-Managed
Database Procedures )
大红鹰葡京会,
中,比较它,本文更像多个step by step教程。

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

场景

每一个航空集团提供世界上分化城市的航班连接,客户想要在单一字段中见到某意气风发一定航空集团援助的全部城市,内容以逗号分隔。因为每家航空公司的城阙数是差别的,大家须求多少个逻辑来拼接城市们,无论有询问结果多少条数据。

在常规的ABAP
CDS内大家可以利用CONCAT函数,但是利用它的时候,大家需求定义固定数量的字段,既然CDS视图无法促成此处要求的管理动态逻辑,要如何处理吧?

那是叁个选用ABAP CDS Table
Function的绝佳场景,因为我们能够运用简单的数据库函数STRING_AGG(String
Aggregation)。这个效应在SQL Script中可用,可是当前照旧不扶持ABAP
CDS视图。

Core data services(以下简单称谓CDS)能够指两样东西,一个是HANA
CDS,一个是ABAP CDS

ABAP CDS视图

在平日的ABAP
CDS视图开荒进度中,大家经过编辑器(平常是ADT)在ABAP层注明了咱们的字段结商谈annotations。激活后,系统会自行地在数量库层生成全数的SQL视图。

大红鹰葡京会 1

ABAP
CDS视图提供多样SQL命令和函数的支撑,借使您想要领悟细节和整个的可用性情,提议你看那篇小说:ABAP
CDS Feature
Matrix

ABAP CDS Table Function

在ABAP CDS Table
Function的费用进度中,咱们将字段布局、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们得以平素在ABAP层写存款和储蓄进度,並且把它封装在类/方法中,更加多介绍能够看前边的篇章:ABAP中的AMDP(ABAP-Managed
Database Procedures

大红鹰葡京会 2

因为英特尔P直接运维数据库脚本,所以须求做几个附加的步子並且会选用到脚本语言(在HANA中即SQL
Script)。稍后在演示部分大家商谈谈安插的细节。

由此上文介绍的那三种开采本事,我们能够最早开荒一个才能演示了。按本文的事例做下去,你将会能够创制你自个儿的ABAP
CDS Table Function
,并且为不能够一贯通过ABAP
CDS落成的必要提供施工方案。为了兑现示例,大家会选择数据库视图SFLIGHTS,这一视图提供了航班连接的细节。

开发

展开你的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数据库卡塔尔(英语:State of Qatar).
  • 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兰德酷路泽N语句。其余,注意大家将字段名转换为前文中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

有星星落落改造

如小编辈所知,HANA CDS只支持HANA数据库,ABAP
CDS理论上扶植两种数据库承包商,结果是,ABAP
CDS相比较之下要少一些效果与利益。由此,在少数意况下,无法使用ABAP
CDS化解难点时,可以行使黄金年代种更动的法子,即通过ABAP Managed Database
Procedures
(AMDP)创建ABAP CDS Table Function

 

相关文章

admin

网站地图xml地图