ABAP Open SQL的RIGHT函数使用动态长度参数报错如何解决?
问题原因
ABAP 旧版本(低于ABAP 7.55)的Open SQL中,RIGHT 函数的第二个入参仅支持静态字面量、ABAP主机变量,不允许嵌套其他SQL函数返回的动态表达式作为参数,因此你写的 LENGTH( NODENAME ) - 8 表达式无法被识别。
解决方案
方案1:用SUBSTRING函数替代(兼容性最优,推荐)
你的需求是截取NODENAME去掉前8位后的剩余内容,直接用SUBSTRING即可实现,不需要嵌套长度计算:
SELECT SUBSTRING( NODENAME, 9 ) FROM RSMHIERNODE WHERE HIEID = 'HRJ' INTO TABLE @lt_commentdata.
说明:
SUBSTRING的第二个参数为起始位置,从1开始计数,填9就表示从第9位开始截取到字符串末尾,完全等价你原本的写法,且兼容所有支持Open SQL新语法的ABAP版本。
方案2:ABAP层后处理(兼容所有版本)
如果你的系统版本极低不支持上述SUBSTRING用法,可以先全量查出NODENAME字段,再在ABAP层做截取:
" 先查原始字段 SELECT NODENAME FROM RSMHIERNODE WHERE HIEID = 'HRJ' INTO TABLE @DATA(lt_raw_node). " 循环处理截取 LOOP AT lt_raw_node ASSIGNING FIELD-SYMBOL(<fs_node>). DATA(lv_cut_node) = RIGHT( <fs_node>-nodename, strlen( <fs_node>-nodename ) - 8 ). APPEND VALUE #( comment = lv_cut_node ) TO lt_commentdata. " 按你内表结构调整赋值逻辑即可 ENDLOOP.
方案3:升级到ABAP 7.55及以上版本
ABAP 7.55之后的版本放宽了Open SQL内置函数的入参限制,支持嵌套表达式作为入参,你原本的写法可以直接激活运行。
内容的提问来源于stack exchange,提问作者emilie
相关产品推荐
相关产品推荐

