TABLE functions

Core data services指,HANA CDS和ABAP CDS

HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种数据库,所以,ABAP CDS阉割了一些功能。导致某些场景,无法直接使用ABAP CDS解决。需要使用一种变通的方法,即通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function

下面的例子就是一个简单的TABLE functions 例子

1: 打开eclipse ,创建一个新的Core Data Services -> Data Definition

选择define table function with parameters

2: 编辑生成的实体:字段 方法

@EndUserText.label: 'TABLE FUNCTION'

define table function YDEMO_TABLE_FUNCTION

with parameters p_carrid : abap.char(5)

returns {

  client       : abap.clnt;

  carrid       : abap.string;

  connid_arr   : abap.string;

}

implemented by method  ZCL_SPFLI_DEMO_CDS=>GET_connid;

3: 创建类:ZCL_SPFLI_DEMO_CDS

增加:IF_AMDP_MARKER_HDB接口,ABAP类转换为AMDP类,并且允许在类的方法内写存储过程

4:类实施代码

  红色为新增代码,其他为自动生成

  • BY DATABASE FUNCTION: 会将方法标记为table function,还有一个选项是通过 BY DATABASE PROCEDURE标记为存储过程.
  • FOR HDB: 设定数据库类型为HDB (HANA数据库).
  • LANGUAGE SQLSCRIPT: HANA数据库存储的语言.
  • OPTIONS READ-ONLY: 存储过程内不允许修改数据.
  • USING: 定义table function中消费的数据库表、视图或者存储过程。在本例中,只访问SPFLI 视图.

CLASS zcl_spfli_demo_cds DEFINITION

  PUBLIC

  FINAL

  CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES if_amdp_marker_hdb .

   

    CLASS-METHODS:

      get_connid FOR TABLE FUNCTION YDEMO_TABLE_FUNCTION.

  PROTECTED SECTION.

  PRIVATE SECTION.

ENDCLASS.

CLASS zcl_spfli_demo_cds IMPLEMENTATION.

 METHOD get_connid

 BY DATABASE FUNCTION

    FOR HDB

    LANGUAGE SQLSCRIPT

    OPTIONS READ-ONLY

    USING SPFLI.

   

    it_connid =

      SELECT DISTINCT

             SPFLI.mandt    as client,

             SPFLI.carrid   as carrid,

             SPFLI.connid   as connid             

          FROM SPFLI

          WHERE CARRID = p_carrid;

    RETURN

      SELECT client,

             carrid,

             STRING_AGG(connid, ', ' ORDER BY connid) as connid_arr

        FROM :it_connid

       GROUP BY client,

                carrid;

 endmethod.

ENDCLASS.

5:测试结果  STRING_AGG 串起connid字段

参考:Concatenate multiple records in a single field using ABAP CDS Table Function

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值