ABAP 7.40, SP08 中的 Open SQL 新特性
1,使用 data_source~*指定列
在7.40, SP08中,可以在SELECT语句中使用data_source~*来指定选取不同的数据库表、视图的全部列来作为结果集。它也可以和单独指定的列col_spec结合(通过聚合表达式)。
当在结果集使用了data_source~*的时候,语法检查会以严格模式运行。
2,SELECT...INTO后的内联声明
根据SELECT语句的返回结果集,现在可以使用DATA(...)以及转义前缀@来内联声明数据对象、结构、内表。比如:
SELECT * FROM sflight INTO @DATA(ls_sflight) WHERE connid = 'AA'.
3,SQL表达式
在7.40, SP05中引入的SQL表达式,现在扩充了以下内容:
- 操作符CASE可以用于执行复杂case(searched case)和简单case
- 可以在GROUP BY后指定SQL表达式
- 可以在SELECT列表中同时指定SQL表达式和聚合表达式
- 可以在SELECT列表或者HAVING子句中指定SQL表达式作为聚合功能(比如avg)参数
如果使用了任一新特性,语法检查将以严格模式运行。
4,用参数读取CDS视图
从7.40, SP08开始,CDS视图可以在定义时带有使用时分配实参的输入参数。为了使该特性可用,在SELECT的data source可选项部分要添加一个由括号包含起来的、由逗号分割的列表:
( pname1 = act1, pname1 = act2, ... )
因为不是所有数据库系统都支持带有参数的视图,现有一个新类 CL_ABAP_DBFEATURES 和它的方法 USE_FEATURES,它会探测当前数据库系统的支持情况。此外,通过参数访问视图会触发语法检查的警告;该警告可通过pragma隐藏。
5,移除限制
以下先前存在的限制已经移除:
- 函数表达式:
- 从7.40, SP08开始,负号 - 可以直接地放置在一个算术表达式的运算数前,而不需要放在其它算术运算符的后面。
- 从7.40, SP08开始,简单case中的operand1, operand2也可以是SQL表达式。
- 从7.40, SP08开始,SQL表达式也可以和聚合表达式或者GROUP BY一起指定。
- joins:
- 从7.40, SP08开始,操作符LIKE和IN可以在ON条件中使用。
- 从7.40, SP08开始,单独的比较可以通过OR连接或者通过NOT否定。
- 从7.40, SP08开始,外联结不再需要包含至少一个来自左右侧表的列的比较。
- 动态WHERE条件:
- 子查询也可以动态指定了。
如果用到了以上的新规则,那么语法检查将以严格模式运行。
6,INTO子句的位置
从7.40, SP08开始,INTO子句也可以位于SELECT语句的最末位置。在这种情况下,SELECT语句的可选项要指定在INTO的后面。
如果将INTO从句作为最后一个子句,语法检查将以严格模式运行。
7,语法规则的进一步严格检查
从7.40, SP08开始,以下的语法构造将包含错误,并产生语法错误或运行时错误。
- WHERE条件的正确性
聚合表达式之外的在HAVING从句中指定的列必须也在GROUP BY中指定。在7.40, SP08之前,这不会被静态语法检查记录,但是会触发一个可捕获的异常。从7.40, SP08开始,这样产生一个语法检查警告并且触发在严格模式之外无法处理的异常。
例如:DATA itab TYPE TABLE OF scarr. SELECT * FROM scarr INTO TABLE itab HAVING carrid = 'LH'.
8,语法检查的“严格模式”
如果在Open SQL中使用了本文中列出的任一新特性,语法检查将以严格模式运行。严格模式比标准模式有着更严格的语句处理。
9,可比较类型
数据库会执行一个用于比较的可比较类型的表。在各种情况下,数据库系统会判断比较的双方是否可比较,如果不可比较,将产生语法错误(在严格模式下)或者语法警告。
本文链接:http://www.cnblogs.com/hhelibeb/p/6757244.html