ABAP 7.40,SELECT .. UP to n ROWS语法混淆

时间:2015-12-21 13:57:05

标签: syntax abap

更新:问题应该撤回,语法是正确的。显然,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世界有点陌生)如果是,那可能是谁?

2 个答案:

答案 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.

希望它有所帮助。