SAP CDS View基础语法

很多同学对于CDS view感觉无从下手,本篇博客将介绍CDS View的基础语法,并附有示例。

1. 定义一个CDS View

用途:

创建一个CDS View

语法:

@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
define view ZDEMO_CDS_DDL
  as select from sbook
{
  carrid,
  connid
}

解释:

  • @AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL' 指定了数据库SQL View的名字,在CDS View激活时,会在数据库层生成对应的SQL View
  • define view ZDEMO_CDS_DDL是定义的CDS View的名字
  • as select from sbook指定了CDS View的数据源,此处的数据源是DB Table sbook
  • { }中定义了CDS view中包含哪些字段

运行效果:

2. Select Distinct 

用途:

如果结果集中有重复的条目,DISTINCt可排除结果集中的重复条目。

语法:

@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
define view ZDEMO_CDS_DDL
  as select distinct from sbook
{
  carrid,
  connid
}

解释:

  • as select distinct from sbook指定了CDS View的数据源,此处的数据源是DB Table sbook

运行效果:

3. Where语句

用途:

限定筛选条件

语法:


@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
define view ZDEMO_CDS_DDL
  as select from sbook
{
  carrid,
  connid
}
where carrid = 'AA'

运行效果:

4. Key 字段声明

用途:

指定CDS View中哪些字段是Key字段

语法:


@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
@AbapCatalog.preserveKey: true
define view ZDEMO_CDS_DDL
  as select from sbook
{
  key carrid,
  key connid,
      fldate,
      bookid,
      customid,
      custtype
}

解释:

  • @AbapCatalog.preserveKey: true 这句annotation 的值为TRUE时,SQL view中的key字段使用CDS中定义的key; 值为FALSE时,使用DB table中table的key field.

运行效果:

5. Build-in 函数

用途:

CDS中自带的一些运算函数

语法:


@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
@AbapCatalog.preserveKey: true
define view ZDEMO_CDS_DDL
  as select from sbook
{
  key carrid,
  key connid,
      concat( carrid, connid ) as flightno,
      order_date,
      concat( concat (substring(order_date,5,2),'-'),
      substring(order_date,1,4) ) as ordermonth
}

解释:

  • concat () 拼接两个字符串,substring( )获取字符串中的一个子串。
  • 更多可用的Build-in函数可以查找ABAP的帮助文档

运行效果:

6. CASE表达式

用途:

实现分支运算

语法:

@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
@AbapCatalog.preserveKey: true
define view ZDEMO_CDS_DDL
  as select from sbook
{
  key carrid,
  key connid,
      case carrid
            when 'AA' then 'American Airlines'
            when 'AB' then 'Air Berlin'
            when 'UA' then 'United Airlines'
            else 'Other Airlines'
            end as airline_name,
      class,
      case
         when class = 'F' then 'First Class'
         when class = 'Y' then 'Business Class'
         else 'others'
         end    as class_level
}

解释:

  • case...when...else...end as 构成分支运算的逻辑
  • when语句中可以是逻辑表达式

运行效果:

7. CAST表达式

用途:

强制类型转换

语法:

@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
@AbapCatalog.preserveKey: true
define view ZDEMO_CDS_DDL
  as select from sbook
{
  key carrid,
  key connid,
      forcurkey,
      forcuram as origin_amount,
      case smoker
            when 'X' then cast ( forcuram as abap.fltp ) * 1.3
            else          cast ( forcuram as abap.fltp ) * 0.9
       end as final_amount
 
}

解释:

  • CAST可以完成所需要的强制类型转换,进而实现在CDS中的运算需求;其中abap.fltp代表转换为abap中的浮点型

运行效果:

8. COALESCE函数

用途:

常用用户处理NULL的状况,为NULL语设定默认值

语法:


@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SQL'
@AbapCatalog.preserveKey: true
define view ZDEMO_CDS_DDL
  as select from sbook
{
  key carrid,
  key connid,
      coalesce( smoker,  'unassigned') as somker_status
}

解释:

  • coalesce(arg1, arg2): 如果arg1不为NULL则返回arg1的值,否则返回arg2的值

小结:

在本文中,我们介绍了SAP CDS View的最基本的运算语法,有关运算过程中遇到的问题,可以进一步根据ABAP 中的帮助文档,查看相关的用法。

<think>好的,我现在需要回答用户关于CDS view casting的问题。首先,我需要确定CDS视图转换在SAP HANA或SQL上下文中的具体含义和应用场景。CDS(Core Data Services)是SAP中定义和管理数据模型的重要工具,而“casting”通常指类型转换,所以用户可能是在询问如何在CDS视图中进行数据类型转换。 接下来,我应该回忆SAP HANA中CDS视图的相关知识。例如,CDS视图支持使用内置函数进行类型转换,如CAST函数。这可能涉及将字符串转换为数字,或者更改日期格式等。此外,还需要考虑在ABAP CDS和HANA CDS之间的差异,因为两者虽然相似,但语法和功能可能有所不同。 然后,我需要验证这些信息是否正确。比如,CAST函数的用法是否符合SAP官方文档的描述,是否有具体的示例可以参考。同时,用户提到的引用内容提到了CL_SQL_CONNECTION等类,这可能与ABAP中的SQL执行有关,但CDS视图通常是在设计时定义的,可能不直接使用这些运行时类。因此,需要区分CDS视图的定义和应用程序中的SQL操作。 可能还需要考虑CDS视图转换的常见问题和解决方案。例如,类型转换失败可能导致数据截断或错误,如何处理这些问题?另外,性能方面,频繁的类型转换是否会影响查询效率,特别是在大数据量的情况下? 用户的问题也可能涉及到更复杂的转换场景,比如在CDS视图中进行嵌套转换,或者在关联不同数据源时需要的类型匹配。这时候需要举例说明如何编写包含CAST的CDS视图代码,并解释每个部分的作用。 最后,根据用户提供的引用,虽然引用内容提到的是ABAP中的SQL执行类,但可能与CDS视图的底层实现有关联,需要指出这种联系,但明确说明CDS视图通常在更高抽象层定义,而不直接使用这些底层类。 总结起来,回答应该包括CDS视图中类型转换的基本方法、语法示例、常见应用场景、可能的问题及解决方案,以及与相关技术的联系。需要确保信息准确,结构清晰,并生成相关问题以帮助用户进一步学习。</think>### CDS View Casting 技术解析 在SAP HANA和SQL上下文中,**CDS view casting**通常指在Core Data Services(CDS)视图中对字段进行显式数据类型转换的操作。这种操作通过`CAST`函数实现,用于确保数据兼容性或适配业务需求。 #### 1. 基础语法与用途 在ABAP CDS或HANA CDS中,`CAST`函数允许将字段从一种数据类型转换为另一种类型。例如: ```sql -- 将字符串类型的字段转换为整数 CAST("Amount" AS ABAP.DEC(15,2)) AS ConvertedAmount ``` 此语法将字段`Amount`从原始类型(如字符串)转换为精度为15、小数位为2的数值类型[^1]。 #### 2. 典型应用场景 - **数据标准化**:不同数据源的字段类型不一致时(如将字符型金额转换为数值型)。 - **计算优化**:确保算术运算中操作数的类型匹配,避免隐式转换的性能开销。 - **视图兼容性**:在CDS视图中强制字段类型,以满足下游接口或报表的要求。 #### 3. 注意事项 - **精度与范围**:转换时需确保目标类型能容纳原始数据,否则可能引发截断错误。例如,将`DEC(20,4)`转换为`INT4`可能导致溢出。 - **性能影响**:频繁使用`CAST`可能增加查询复杂度,需结合HANA的执行计划分析优化。 - **ABAP与HANA CDS差异**:ABAP CDS的`CAST`支持有限类型(如数值、日期),而HANA CDS支持更广泛(包括二进制和空间类型)。 #### 4. 示例:处理日期转换 ```sql -- 将字符串日期'20231001'转换为日期类型 SELECT FROM my_table { CAST('20231001' AS ABAP.DATS) AS ValidDate } ``` #### 5. 相关技术关联 CDS视图的转换操作最终会被编译为底层SQL(如HANA SQL),而ABAP中的`CL_SQL_*`类(如`CL_SQL_STATEMENT`)通常用于动态执行原生SQL,与CDS的静态定义形成互补。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值