You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效检查无键表中存在非初始lenum字段的行?

内表非初始lenum行检查的现代实现方案

推荐写法

1. FILTER + LINE_EXISTS组合

针对无键内表,直接用LINE_EXISTS带WHERE条件会因无可用键报错,结合FILTER即可解决:

DATA(has_non_initial_lenum) = LINE_EXISTS( FILTER #( quants WHERE lenum IS NOT INITIAL ) ).

FILTER先筛选出所有lenum非初始的行,再通过LINE_EXISTS判断筛选结果是否非空,直接返回布尔值,代码简洁高效。

2. 简化版REDUCE写法

如果偏好REDUCE,可以优化为更紧凑的形式:

DATA(has_non_initial_lenum) = REDUCE abap_bool( 
  INIT res = abap_false 
  FOR <quant> IN quants 
  NEXT res = res OR ( <quant>-lenum IS NOT INITIAL ) 
).

遍历过程中只要遇到第一个非初始lenum,后续判断会保留abap_true,无需继续遍历,效率和带EXIT的LOOP一致。

无效原因说明

你之前尝试的LINE_EXISTS直接带WHERE条件失效,是因为该写法要求内表必须有主键或辅助键,而你的内表是SELECT内联声明的无键表,不满足这个前提。

旧式LOOP写法对比

DATA(has_non_initial_lenum) = abap_false.
LOOP AT quants INTO DATA(quant).
  IF quant-lenum IS NOT INITIAL.
    has_non_initial_lenum = abap_true.
    EXIT.
  ENDIF.
ENDLOOP.

逻辑直观但代码冗余,仅适用于ABAP 7.40及以下版本。

内容的提问来源于stack exchange,提问作者Kevin Holtkamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:20:30