ABAP 7.52 中的Open SQL新特色

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

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

本文翻译了履新文档中有关Open SQL的一些。

正文翻译了翻新文档中有关Open SQL的有的。

若果读者是Open SQL的新手,请不要从本文看起。更方便的科目是:A complete
guide to OpenSQL statements – Step-by-step tutorial with
screenshots

假如读者是Open SQL的新手,请不要从本文看起。更恰当的学科是:A complete
guide to OpenSQL statements – Step-by-step tutorial with
screenshots

 

 

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

本文链接: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 ).

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操作符。

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 = 0.
  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.

 

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 = 0.
  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的过滤条件现在得以在路子表明式中指定。

4,路径表明式

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

  • 在传参的空域部分、属性方括号的空域部分和斜杠\前的职务,路径表达式能够分开为五个代码行。
  • 对象数据也是CDS表函数(table
    function)的时候,也足以采纳Association了。
  • 参数可以在路线表达式association的后面传递。由此可以指定带有参数的CDS
    entities作为association的数据源。
  • 在路径表明式中,现在可以指定join表达式的cardinality和品种作为性能。
  • association的过滤条件现在得以在路径表明式中指定。

5,访问控制

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

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前边指定。

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识别为一种优化表达。

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的列一起出现。现在这些界定已经被移除,语法检查只会对此指示一个警戒,而不是不当。

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

在此前的严格格局语法检查中,SELECT语句的增大项FOR
ALL ENTRIES
IN不可能和SELECT列表中类型为STRING和RAWSTRING或者LCHR和LRAW的列一起出现。现在以此范围已经被移除,语法检查只会对此提醒一个警戒,而不是荒唐。

9,严刻情势的语法检查

比方您用到了地点列出的Open SQL中的任一新特性,语法检查会以从严情势运作。

9,严苛形式的语法检查

只要你用到了地方列出的Open SQL中的任一新特性,语法检查会以严峻形式运行。

10,Client处理

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

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

10,Client处理

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

  • CDS访问控制不会在跨Client访问时工作。由此,附加项USING
    CLIENT
    CLIENT
    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

 

11,Open SQL中的代理服务

CL_OSQL_REPLACE可以在ABAP
Unit单元测试司令员数据库访问重定向至访问此外数据库的Open SQL。

该类只好在测试类中利用。

演示程序:DEMO_CL_OSQL_REPLACE