S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52。

本文翻译了更新文档中有关Open SQL的部分。

如果读者是Open SQL的新手,请不要从本文看起。更合适的教程是:A complete guide to OpenSQL statements – Step-by-step tutorial with screenshots

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

1,内表作为数据源

现在可以将内表指定为查询语句的数据源。如果内表数据需要传递给数据库的话,则只能在部分数据库上运行。

例子:

DATA itab TYPE HASHED TABLE OF scarr
WITH UNIQUE KEY mandt carrid. IF NOT cl_abap_dbfeatures=>use_features(
EXPORTING
requested_features =
VALUE #( ( cl_abap_dbfeatures=>itabs_in_from_clause ) ) ).
cl_demo_output=>display(
`System does not support internal tables as data source` ).
RETURN.
ENDIF. itab = VALUE #( ( carrid = 'LH' carrname = 'L.H.' )
( carrid = 'UA' carrname = 'U.A.' ) ). SELECT scarr~carrid, scarr~carrname, spfli~connid
FROM @itab AS scarr
INNER JOIN spfli ON scarr~carrid = spfli~carrid
INTO TABLE @DATA(result)
##db_feature_mode[itabs_in_from_clause]. cl_demo_output=>display( result ).

2,关系表达式

条件表达式现支持以下情况:

  • 可以对字符类数据类型大小比较,并且不再限制N类型。
  • 操作符BETWEEN不再限制N类型,SQL表达式现在可以在右侧使用了。
  • 现在也支持LIKE操作符。

3,转换函数

新的类型转换函数BINTOHEXHEXTOBIN现在可以在SQL表达式中把byte strings转换为character strings,这种功能在CAST表达式中是不可行的。

示例程序,可以看到两种转换方式的结果是一样的:

 SELECT SINGLE id AS uuid32, hextobin( id ) AS uuid16
FROM iwreferenc
WHERE tcode = 'SE38'
INTO @DATA(wa). IF sy-subrc = .
DATA uuid16 LIKE wa-uuid16.
cl_system_uuid=>convert_uuid_c32_static(
EXPORTING
uuid = wa-uuid32
IMPORTING
uuid_x16 = uuid16 ).
ASSERT wa-uuid16 = uuid16.
ENDIF.

4,路径表达式

以下特性现在在路径表达式(path expression)中可用:

  • 在传参的空白部分、属性方括号的空白部分和斜杠\前的位置,路径表达式可以分割为多个代码行。
  • 目标数据也是CDS表函数(table function)的时候,也可以使用Association了。
  • 参数可以在路径表达式association的后面传递。由此可以指定带有参数的CDS entities作为association的数据源。
  • 在路径表达式中,现在可以指定join表达式的cardinality和类型作为属性。
  • association的过滤条件现在可以在路径表达式中指定。

5,访问控制

新的关键字WITH PRIVILEGED ACCESS可以关闭CDS的访问控制

6,子查询中的ORDER BY和UP TO, OFFSET

在子查询中,现在可以使用ORDER BY子句和附加项UP TO, OFFSET了。不过,不是所有数据库都支持在子查询中运行ORDER BY。

注意:在子查询中,UP TO只能用在ORDER BY子句后面,附加项OFFSET也只能在UP TO后面指定。

7,LFET OUT JOIN中的Cardinality

在LFET OUTER JOIN中,可以用附加项ONE TO MANY指定Cardinality。它可以被SAP HANA识别为一种优化说明。

8,SELECT列表中的FOR ALL ENTRIES IN和字符串

在先前的严格模式语法检查中,SELECT语句的附加项FOR ALL ENTRIES IN不能和SELECT列表中类型为STRING和RAWSTRING或者LCHR和LRAW的列一起出现。现在这个限制已经被移除,语法检查只会对此提示一个警告,而不是错误。

9,严格模式的语法检查

如果你用到了上面列出的Open SQL中的任一新特性,语法检查会以严格模式运行。

10,Client处理

在切换Client读取CDS entities时,附加项USING CLIENTCLIENT SPECIFIED会应用以下(更严格的)规则:

  • CDS访问控制不会在跨Client访问时工作。因此,附加项USING CLIENTCLIENT SPECIFIED只能在CDS entities的访问控制被关闭的时候使用,即注解为AccessControl.authorizationCheck.#NOT_ALLOWED,或者查询语句中使用了上文5中的WITH PRIVILEGED ACCESS时。
  • 路径表达式只能在自动Client处理打开的时候使用。不可以使用CLIENT SPECIFIED,以防路径表达式中的association中的FROM子句中的目标数据是指定Client(Client-specific)的数据源(?),association的源数据源也不可以是指定客户端的。

11,Open SQL中的代理服务

CL_OSQL_REPLACE可以在ABAP Unit单元测试中将数据库访问重定向至访问其它数据库的Open SQL。

该类只能在测试类中使用。

示例程序:DEMO_CL_OSQL_REPLACE

相关阅读:ABAP 7.50 新特性

       ABAP 7.40, SP08 中的 Open SQL 新特性

      ABAP 7.53 中的ABAP SQL(原Open SQL)新特性

ABAP 7.52 中的Open SQL新特性的更多相关文章

  1. ABAP 7.40, SP08 中的 Open SQL 新特性

    1,使用 data_source~*指定列 在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表.视图的全部列来作为结果集.它也可以和单独指定的列c ...

  2. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  3. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  4. Java 9中的 9个 新特性

    Java 9 中的 9个 新特性 java 7 2011发布,Java 8 2014发布,java9发布于2017年9月21日. 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它 ...

  5. 【译】.NET 5. 0 中 Windows Form 的新特性

    自从 Windows Form 在 2018 年底开源并移植到 .NET Core 以来,团队和我们的外部贡献者都在忙于修复旧的漏洞和添加新功能.在这篇文章中,我们将讨论 .NET 5.0 中 Win ...

  6. 【C#】第1章 VS2015中C#6的新特性

    分类:C#.VS2015 创建日期:2016-06-12 一.简介 VS2015内置的C#版本为6.0,该版本提供了一些新的语法糖,这里仅列出个人感觉比较有用的几个新功能. 二.几个很有用的新特性 注 ...

  7. Visual Studio 2015 RC中的ASP.NET新特性和问题修正

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") 微软在Build大会上发布了Visual Studio 2015 RC,这也预示着Visual Studio 201 ...

  8. 在 vs2017 中使用 C# 7 新特性。

    几个概念区分: 1.C#   C# 是一种.net 语言,与此类似的还有 vb,F#.不同版本的语言要配合相应的解释器才能发挥作用.目前 最新版本 为 C# 7.3. 2.VS        VS 是 ...

  9. Oracle12c 中RAC功能增强新特性之ASM&Grid

    1.    自动存储管理(ASM)方面的增强 1.1.   Flex ASM 在典型的网格架构安装中,每个节点有自己的ASM实例运行并扮演该节点上数据库的存储容器的角色,对这种安装配置,存在单点失败的 ...

随机推荐

  1. Vue 国际化 vue-i18n 用法详解

    vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.js 2.x 以上版本 安装方法:(此处只演示 npm) npm insta ...

  2. LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...

  3. 忘记root密码,进入单用户模式修改密码

    进入单用户模式 rhel61.在系统数秒时,按下键,进入到系统引导菜单 中2.选择系统后 按“e”键 选择kernel后 按“e”键 后空格 1+回车 b:启动系统 进入到单用户模式 rhel71.在 ...

  4. Linux系列教程(七)——Linux帮助和用户管理命令

    上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...

  5. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  6. linux学习(五)系统目录结构,ls命令,文件类型,alias

    一.系统目录结构 在我们的根目录下,有这样一些文件夹 /bin /sbin /usr/bin /usr/sbin /sbin一般都是root用户用的 /boot 系统启动相关的,grup就放在这里,这 ...

  7. Code Lock

    Code Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Su ...

  8. LR多分类推广 - Softmax回归*

    LR是一个传统的二分类模型,它也可以用于多分类任务,其基本思想是:将多分类任务拆分成若干个二分类任务,然后对每个二分类任务训练一个模型,最后将多个模型的结果进行集成以获得最终的分类结果.一般来说,可以 ...

  9. jQuery_事件学习

    一.click事件 click事件----鼠标单击事件 $('.bt').click(function() { alert("本身的事件");}) 当class为bt的div被但单 ...

  10. kafka学习笔记1:测试环境搭建

    最近因为架构中引入了kafka,一些之前在代码中通过RPC调用强耦合但是适合异步处理的内容可以用kafka重构一下. 考虑从头学一下kafka了解其特性和使用场景. 环境选择 首先是测试环境的搭建,平 ...