在长期的停滞后,Open SQL的发展终于从沉睡中醒来。从ABAP 7.40开始,SAP推进了某些关键的改变,以尽可能地包含SQL92中的特性,并提供与ABAP CDS中的DDL里面的SELECT一样的功能给Open SQL。为了实现这些目标,ABAP运行时环境中引入了一个新的SQL parser作为Open SQL的新基础。结果就是,Open SQL现在可以在ABAP中扮演一些和以往不同的角色了。

虽然在7.40之前,Open SQL更多地被视为ABAP语言本身的一部分,但在同时,SQL关键字变得越来越介词化了。关于这点,主要的体现之一便是有关宿主变量的新规则。在7.40之前,你可以像在其它ABAP语句中使用ABAP变量那样在Open SQL中使用它们。实际上,这种自由阻止了更高效的开发。Open SQL语句在被转换为native SQL之后才会在数据库中运行。为了在WHERE条件中实现比简单比较更为复杂的东西,Open SQL parser必须能清晰的区分运算符两端的东西到底是ABAP变量、还是数据库内容,从而发送相应的内容给数据库。为了完成这一任务,Open SQL中的ABAP变量因此成为了完全的宿主变量host variables)。就像ABAP变量在native SQL中的成分一样(EXEC SQL)。你可以(而且应当)在Open SQL中的ABAP 宿主变量前加上转义符@实际上,只有这样做了,你才能使用ABAP 7.40版本之后的全部Open SQL新特性。Open SQL中引入的其它的基础修改也是为了让其更加适应未来,比如逗号分隔、以及将SELECT语句的INTO附加项放在authentic SQL子句的后面。(译注:authentic是什么意思没看懂,不过这句话的意思应当是指INTO语句不应是SQL本身的一部分,所以要放到后面以示区分)

 

这些方法带来的第一个好处,已经在ABAP 7.40版本中放出,包括可以在不同操作数位置使用的SQL表达式,以及内联声明的可能性。在ABAP 7.50中,Open SQL依然在发展着,本文将介绍一些新特性(未来还会有更多)。

 

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

原文标题:ABAP News for Release 7.50 – Host and Other Expressions in Open SQL

宿主表达式

在大多数可以放置宿主变量的地方,包含7.40版本以来的SQL表达式的操作数位置或者写SQL语句的工作区,现在可以通过如下方式放置宿主表达式(host expression):

… @( abap_expression ) …

宿主表达式abap_expression可以是任何ABAP表达式,可以是一个构造器表达式、表表达式、算术表达式、字符串表达式、bit表达式、内建函数、函数性的方法、或者是方法,它通过括号()包围起来,并且要加上前缀@。Open SQL中的宿主表达式从左到右计算,并且它们的结果会作为宿主变量传递给数据库。事实上,你可以将宿主表达式视为通过ABAP表达式为ABAP帮助变量赋值的简写。以下例子演示了一个表表达式,表达式从内表carriers中读取值,并放置在where条件右端:

SELECTcarrid, connid, cityfrom, citytoFROMspfliWHERE carrid =@( VALUE spfli-carrid( carriers[ KEY name
carrname
= name ]-carrid
OPTIONAL ) )
INTO TABLE @DATA(result)

标签: none

添加新评论