3

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


我正在查看 ABAP 关键字文档 7.40,SELECT -> SELECT 添加。对于加法最多 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 语法没有涵盖它:UP TO n ROWS 应该在 FROM 之后。

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

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

4

2 回答 2

3

我现在无法检查,但我怀疑您在“WHERE ...”和“ORDER BY ...”部分之后放置了“INTO ...”和“UP TO ...”部分。 文档指出SELECT 的语法是:

SELECT result 
 INTO target
 FROM source 
 [WHERE condition]
 [GROUP BY fields] 
 [HAVING  cond]
 [ORDER BY fields].

附注“FROM 子句......也可以放在 INTO 子句之前。” SELECT/INTO/FROM之间没有可以插入WHERE/GROUP BY/HAVING/ORDER BY的备注。

所以,尝试一下:

SELECT *
   FROM scustom
   INTO @wa_scustom
   UP TO 3 ROWS
   WHERE custtype = 'B'
   ORDER BY discount DESCENDING.
ENDSELECT. 
于 2015-12-21T21:35:47.370 回答
1

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

泛化时,请使用较旧的语法。它仍然适用于较新的版本,因为 SAP 具有强大的向后兼容性策略。

“发送的内容要保守,接受的内容要自由”。

像这样的东西:

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

希望能帮助到你。

于 2015-12-23T15:08:17.110 回答