ABAP 7.40选择。。ENDSELECT最多n行语法?

ABAP 7.40选择。。ENDSELECT最多n行语法?,select,abap,opensql,Select,Abap,Opensql,更新:问题应该撤回,语法正确。显然,SAP通过语法定义ABAP,然后由纯文本中的其他规则修改。我错过了第二部分 我正在查看ABAP关键字文档7.40,选择->选择添加。对于最多n行的加法,它给出了一个示例 DATA: wa_scustom TYPE scustom. SELECT * FROM scustom WHERE custtype = 'B' ORDER BY discount DESCENDING INTO @wa_scust

更新:问题应该撤回,语法正确。显然,SAP通过语法定义ABAP,然后由纯文本中的其他规则修改。我错过了第二部分


我正在查看ABAP关键字文档7.40,选择->选择添加。对于最多n行的加法,它给出了一个示例

DATA: wa_scustom TYPE scustom.

SELECT *
       FROM scustom
       WHERE custtype = 'B'
       ORDER BY discount DESCENDING
       INTO @wa_scustom
       UP TO 3 ROWS.
ENDSELECT. 
我在SAP 7.40系统中验证了该代码,并得到了错误

第7行:“INTO”在此处无效预计

另一方面,以下代码是可以接受的,尽管文档中给出的SELECT语法没有涵盖它:FROM后面最多应该有n行

SELECT COUNT(*) UP TO 1 ROWS
    FROM MARC
    WHERE matnr eq 100.

当我们正在编写一个自动生成ABAP代码的工具时,最好知道什么是合法的,什么是不合法的。是否有“最终”文件?一般来说,是否值得尝试联系SAP的人员进行更正?(你看,我对SAP世界有些陌生)如果是,那会是谁

我现在无法检查,但我怀疑您在“WHERE…”和“ORDER BY…”之后放置了“INTO…”和“最多…”部分。 SELECT的语法为:

SELECT result 
 INTO target
 FROM source 
 [WHERE condition]
 [GROUP BY fields] 
 [HAVING  cond]
 [ORDER BY fields].
备注“FROM子句…也可以放在INTO子句之前。”没有备注可以插入WHERE/GROUP BY/HAVING/ORDER BY BETH SELECT/INTO/FROM

因此,请尝试:

SELECT *
   FROM scustom
   INTO @wa_scustom
   UP TO 3 ROWS
   WHERE custtype = 'B'
   ORDER BY discount DESCENDING.
ENDSELECT. 

实际上,SAP强加了一种语法,只允许在WHERE子句之前出现“最多n行”和其他参数。但是,在较新的ABAP服务器版本中,它具有更大的灵活性

概括时,请使用较旧的语法。由于SAP具有强大的向后兼容性策略,它仍将在较新版本上工作

“发送的东西要保守,接受的东西要自由”

诸如此类:

SELECT {fields}
  FROM {db table}
  INTO {work area}
  UP TO {n} ROWS
  WHERE {field} {condition} {value}
  ORDER BY {field} {ASCENDING/DESCENDING}.
ENDSELECT.

希望有帮助。

啊,我想我找到了关于第二个代码段的一些信息:根据ABAP关键字文档7.31,给定的代码是合法的。因此,可能SAP更改了语法,但让解析器默默地接受旧语法。看起来abap编译器希望在where/group by/order by part之前使用“up to”指令。但是我还没有找到任何关于这些规则的文档。是的,这是SAP通常的政策。在最新的文档中,它强制只使用最新的语法,但始终支持遗留语法。正如我所说,代码段取自SAP官方发布的ABAP 7.40。你的纠正很有效。我还看到了另一个7.40系统中的失败代码。但这就是问题所在:哪些系统设置可能存在,哪些是精确有效的语法?