ABAP SELECT数据库提示,正确的语法

时间:2016-10-06 11:40:51

标签: grammar abap

ABAP SELECT语句允许提供数据库提示。它们以关键字%_HINTS开头。现在我想知道SELECT语句保持提示的正确语法:哪些提示都可以出现?我已经检查了ABAP关键字文档,但似乎没有提到它们。

您是否可以向我指出一些描述数据库提示如何适合ABAP语法的文档?

关于我的问题的更多信息:我们构建了一个工具(用Java),可以自动将ABAP代码转换为不同的ABAP代码。应用于SELECT语句,它可能会添加或删除子句。因此,提示的位置可能会因转换而发生变化。所以,我的问题是允许提示,而不是正确提示的样子。

4 个答案:

答案 0 :(得分:3)

官方文档位于note 129385(但遗憾的是,如果没有帐户,则无法访问)。

答案 1 :(得分:0)

DB6数据库的两个示例,因为该注释不包含任何:

  1. 使用嵌套循环连接而不是VBAP和VBEP之间的散列连接
  2. %_HINTS DB6 '<NLJOIN><IXSCAN TABLE=''VBAP'' />' DB6 '<IXSCAN TABLE=''VBEP'' /></NLJOIN>'

    1. 为VBEP使用自定义索引ZI0
    2. %_HINTS DB6 '<IXSCAN TABLE=''VBEP'' INDEX=''"VBEP~ZI0"'' />'

      编辑:提示是选择块中的最后一个语句。

      SELECT * INTO TABLE lt_table FROM dbtable WHERE x = 1 %HINTS "first hint %HINTS "second hint . "<<< end of select statement

答案 2 :(得分:0)

不要使用它。如果有一天你迁移到HANA,这个HINT将破坏你的代码,你必须逐个删除它。我之前尝试过这些提示,并没有显着提高性能。

但如果您仍想使用它,这些是特定于数据库的,这是Oracle的语法

http://saptechnical.com/Tips/ABAP/SecondaryIndexes.htm

答案 3 :(得分:0)

... %_HINTS <DB type> 'one or more hints'ABAP documentation中进行了描述:

<DB type>代表提示适用的数据库类型:

  • ORACLE
  • 组屋
  • ADABAS
  • MSSQLNT
  • DB6
  • DB2

有两类提示(您可以将它们混合在同一字符串中):

  • 打开SQL提示
  • 数据库提示

Open SQL提示在运行时由SAP数据库接口解释,并且在&符之间具有语法(在注释48230 - Parameters for the SELECT ... FOR ALL ENTRIES statement中进行了描述),因此它们的语法是已知的(但是您必须阅读SAP注释):

  • &替代文学&
  • &prefer_in_itab_opt 1&

数据库提示是其他所有不在“与”号之间的提示。它们直接发送到相关的数据库,由它们进行解释。如果某些提示无效,则数据库将忽略它们。注释129385 - Database hints in Open SQL中提供了简短的概述,但是您必须阅读数据库系统的官方文档才能获得最新信息。

请注意,可以为多个数据库提供提示,但在运行时仅使用当前SAP数据库之一(如果有):

SELECT ... %_HINTS ORACLE  'INDEX...' 
                   HDB     'INDEX...'
                   MSSQLNT 'INDEX...'.

至少从ABAP版本4.5开始,允许SELECTUPDATEDELETE的提示。

编译器可能会在严格模式下尽可能地检查提示。