力所不及使用ABAP

注:本文的要害理论内容已经包罗在前头的AMDP介绍小说:ABAP中的AMDP(ABAP-Managed
Database Procedures )

中,比较它,本文更像贰个step by step教程。

场景

各种航空集团提供世界上不相同城市的航班连接,客商想要在单一字段中来看某一特定航空集团支持的具备城市,内容以逗号分隔。因为每家航空企业的都会数是不一样的,大家须要贰个逻辑来拼接城市们,无论有查询结果多少条数据。

在常规的ABAP
CDS内大家得以选择CONCAT函数,然而选拔它的时候,我们必要定义固定数量的字段,既然CDS视图无法完结此处须要的拍卖动态逻辑,要怎么样管理啊?

那是一个利用ABAP CDS Table
Function的绝佳场景,因为我们得以行使轻便的数据库函数STRING_AGG(String
Aggregation)。那一个功用在SQL Script中可用,可是当前依旧不辅助ABAP
CDS视图。

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

ABAP CDS Table Function

在ABAP CDS Table
Function的付出进程中,我们将字段结构、参数(可选)、association等通过类/方法定义为实体。通过英特尔P大家得以一贯在ABAP层写存款和储蓄进程,而且把它封装在类/方法中,越来越多介绍能够看前面包车型大巴篇章:ABAP中的AMDP(ABAP-Managed
Database Procedures

澳门皇冠官网app 1

因为AMDP直接运维数据库脚本,所以要求做多少个附加的手续而且会利用到脚本语言(在HANA中即SQL
Script)。稍后在示范部分大家构和谈铺排的内部原因。

通过上文介绍的那三种开辟技艺,大家得以起来支付多少个技术示范了。按本文的事例做下来,你将会得以创立你和谐的ABAP
CDS Table Function
,并且为不能够直接通过ABAP
CDS落成的要求提供建设方案。为了达成示例,大家会利用数据库视图SFLIGHTS,这一视图提供了航班连接的内部原因。

开发

张开你的HANA Studio(或然ADT),创造一个新的Core Data 瑟维斯s ->
Data Definitio。

挑选project,package何况定义名字和描述:

澳门皇冠官网app 2

澳门皇冠官网app,分选传输央求,然后点击Next。在模板中选用最终二个选项“Define Table
Function with Parameters”,然后点击Finish:

澳门皇冠官网app 3

 编辑生成的实业,包涵以下内容:

  • 字段:
    • 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还不设有。下一步,让大家创制它:

澳门皇冠官网app 4

让类包蕴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关键字去重,因为我们会找到在差别的连天日期的如出一辙的宇宙航行公司的城阙记录,如图:

澳门皇冠官网app 5

英特尔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中的结果:

澳门皇冠官网app 6

 

克罗地亚(Croatia)语原著:Concatenate multiple records in a single field using ABAP CDS
Table
Function

有少数改造

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

ABAP CDS视图

在日常的ABAP
CDS视图开垦进程中,大家透过编辑器(平常是ADT)在ABAP层表明了作者们的字段结商谈annotations。激活后,系统会自动地在数据库层生成全数的SQL视图。

澳门皇冠官网app 7

ABAP
CDS视图提供三种SQL命令和函数的帮助,假若你想要驾驭细节和全部的可用性格,提议您看那篇小说:ABAP
CDS Feature
Matrix

相关文章