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

ABAP中变量赋值*无法像SQL的%匹配全部数据,原因何在?

问题分析与解决办法

为什么'*'无法实现全匹配?

在ABAP SQL里,=是精确匹配运算符,*在这里只是一个普通字符,只会匹配GBSTK字段值恰好等于*的记录,不会像SQL的%那样被当作通配符使用。哪怕换成%,直接用GBSTK = '%'也不行——通配符必须配合LIKE关键字才能生效,但要获取所有状态,完全没必要用通配符,直接跳过GBSTK的过滤条件反而更高效。

修改后的代码示例

这里提供两种简洁的实现方式:

方式1:用逻辑条件控制过滤

DATA: TEST TYPE C.

PARAMETERS:
  P_R1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
  P_R2 RADIOBUTTON GROUP GRP1,
  P_R3 RADIOBUTTON GROUP GRP1.

IF P_R1 = 'X'.
  TEST = 'B'.
ELSEIF P_R2 = 'X'.
  TEST = 'A'.
ENDIF.

SELECT VBELN, GBSTK
  FROM LIKP
  WHERE ( P_R3 = 'X' OR GBSTK = @TEST )
  INTO TABLE @DATA(IT_FINAL).

CL_DEMO_OUTPUT=>DISPLAY( IT_FINAL ).

选中第三个单选按钮时,P_R3 = 'X'成立,整个WHERE条件直接为真,返回所有记录;选中前两个按钮时,按GBSTK的精确值过滤。

方式2:分分支执行SELECT语句

DATA: IT_FINAL TYPE TABLE OF (VBELN TYPE LIKP-VBELN, GBSTK TYPE LIKP-GBSTK).

PARAMETERS:
  P_R1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
  P_R2 RADIOBUTTON GROUP GRP1,
  P_R3 RADIOBUTTON GROUP GRP1.

IF P_R1 = 'X'.
  SELECT VBELN, GBSTK FROM LIKP WHERE GBSTK = 'B' INTO TABLE IT_FINAL.
ELSEIF P_R2 = 'X'.
  SELECT VBELN, GBSTK FROM LIKP WHERE GBSTK = 'A' INTO TABLE IT_FINAL.
ELSEIF P_R3 = 'X'.
  SELECT VBELN, GBSTK FROM LIKP INTO TABLE IT_FINAL.
ENDIF.

CL_DEMO_OUTPUT=>DISPLAY( IT_FINAL ).

这种写法逻辑更直观,每个单选按钮对应独立的查询逻辑,避免了变量传递的额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:36:16