当前位置:网站首页>ABAP CDS Table Function介绍与示例
ABAP CDS Table Function介绍与示例
2022-07-27 22:58:00 【51CTO】
参考博客:
《ABAP CDS Table Function介绍与示例》
ABAP CDS Table Function
在ABAP CDS Table Function的开发过程中,我们将字段结构、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们可以直接在ABAP层写存储过程,并且把它封装在类/方法中,更多介绍可以看之前的文章:ABAP中的AMDP(ABAP-Managed Database Procedures 。
场景
每个航空公司提供世界上不同城市的航班连接,用户想要在单一字段中看到某一特定航空公司支持的所有城市,内容以逗号分隔。因为每家航空公司的城市数是不同的,我们需要一个逻辑来拼接城市们,无论有查询结果多少条数据。
在常规的ABAP CDS内我们可以使用CONCAT函数,但是使用它的时候,我们需要定义固定数量的字段,既然CDS视图不能实现此处需要的处理动态逻辑,要如何处理呢?
这是一个使用ABAP CDS Table Function的绝佳场景,因为我们可以使用简单的数据库函数STRING_AGG(String Aggregation)。这个功能在SQL Script中可用,但是目前还是不支持ABAP CDS视图。
开发

编辑生成的实体,包含以下内容:
- 字段:
- Client
- Airline Code
- Airline Name
- Cities To
- 类: ZCL_FLIGHTS_DEMO_CDS
- 方法: FLIGHTS_CONNECTIONS
结果应该是:
当然,现在ZCL_FLIGHTS_DEMO_CDS还不存在。下一步,让我们创建它:

让类包含IF_AMDP_MARKER_HDB接口。这一步会把你的ABAP类转换为AMDP类,并且允许在类的方法内写存储过程。
在方法实现中我们需要引入某些配置选项:
- BY DATABASE FUNCTION: 会将方法标记为table function,还有一个选项是通过 BY DATABASE PROCEDURE标记为存储过程.
- FOR HDB: 设定数据库类型为HDB (HANA数据库).
- LANGUAGE SQLSCRIPT: HANA数据库存储的语言.
- OPTIONS READ-ONLY: 存储过程内不允许修改数据.
- USING: 定义table function中消费的数据库表、视图或者存储过程。在本例中,只访问SFLIGHTS 视图.
让我们准备好查询分割逻辑的两个SELECT语句。
第一个SLECT需要获取Client, Airline Code, Airline Name和City To字段,并通过DISTINCT关键字去重,因为我们会找到在不同的连接日期的相同的航空公司的城市记录,
AMDP的优点之一是你可以将SELECT的查询结果传输至“内表”,并且可以执行新的SELECT来读取它的数据。让我们应用这一功能的优点,并且将第一个SELECT的语句的查询结果命名为itab_cities.
在第二个SELECT中,我们要从itab_cities中读取数据并且实现数据库方法STRING_AGG来聚合多个城市和航空公司。为了实现这一功能我们需要基于Client,Airline Code和Name字段GROUP BY条目。写法是:
注意:table function应永远有返回参数,所以记着在最后一个SELECT语句前放一个RETURN语句。另外,注意我们将字段名转换为前文中ABAP CDS Table Function声明的字段名,如果你没有提供一个合适的别名,激活的时候编译器会给出提示。
类ZCL_FLIGHTS_DEMO_CDS的最终版本是这样的:
执行结果

边栏推荐
- Jmeter在性能测试中的应用实践样例
- 如果某个表有近千万数据,CRUD比较慢,如何优化
- Redis cache penetration breakdown and avalanche
- 诺基亚宣布与博通合作开发5G芯片
- node-red与TDengine交互
- 【C语言入门】ZZULIOJ 1026-1030
- Recommended system model (III): fine scheduling model [LR, gbdt, wide & deep, DCN, DIN, Dien, MMOE, ple]
- Function related knowledge
- Detailed explanation of swoole memory table
- 浏览器视频帧操作方法 requestVideoFrameCallback() 简介
猜你喜欢

Redis缓存穿透击穿和雪崩

Maximize activation

Multithreading and multithreaded programming
![[300 opencv routines] 241. Scale invariant feature transformation (SIFT)](/img/7a/a764c779c3162920c832325f89f340.png)
[300 opencv routines] 241. Scale invariant feature transformation (SIFT)

Basic concept and classification of i/o equipment

Starfish Os打造的元宇宙生态,跟MetaBell的合作只是开始

代码随想录笔记_哈希_1002查找共用字符

One year anniversary of creation, Chongba young Lang

Jointly create a new chapter in cultural tourism | xinqidian signs a strategic cooperation agreement with Guohua cultural tourism

KMP review + AC automata Prequel
随机推荐
Circular structure of shell system learning
Recommended system - indicators: CTR, CVR
Hierarchy of file system
Multithreading and multithreaded programming
函数相关知识
文件系统的层次结构
node-red与TDengine交互
范德蒙德卷积 学习笔记
CAP的理解
Redis缓存穿透击穿和雪崩
线性代数 【23】 概念的深入01 - Points坐标点和Vectors向量
Leetcode - find the median of two positively ordered arrays
[CruiseControl]Build Result JSP
oracle分组取最大值
推荐系统-精排模型:xDeepFM
诺基亚宣布与博通合作开发5G芯片
Uni app advanced style framework / production environment
Resolved Unicode decodeerror: 'UTF-8' codec can't decode byte 0xa1 in position 0: invalid start byte
Basic concept and classification of i/o equipment
Use of postman