更新:问题应该撤回,语法是正确的。显然,SAP通过语法定义ABAP,然后通过纯文本中的附加规则进行修改。我错过了第二部分。
我正在查看ABAP关键字文档7.40,SELECT - > SELECT添加。对于UP TO n ROWS的添加,它给出了示例
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世界有点陌生)如果是,那可能是谁?
答案 0 :(得分:3)
我现在无法检查,但我怀疑你有" INTO ......"和"到..."零件放置在" WHERE ..."和" ORDER BY ..."部分。 Documentation states SELECT的语法是:
SELECT result
INTO target
FROM source
[WHERE condition]
[GROUP BY fields]
[HAVING cond]
[ORDER BY fields].
with remark" 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.
答案 1 :(得分:0)
确实,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.
希望它有所帮助。