ABAP SQL中WHERE条件内COND表达式无法识别BLART字段如何解决
你遇到的报错是因为ABAP SQL里@(...)包裹的主机表达式是在ABAP应用服务器端预先计算的,无法直接读取数据库表的字段值,你写在COND里的blart会被系统识别为ABAP变量而不是ACDOCA表的字段,自然会报无法识别的错误。
如果你的逻辑是根据数据库中ACDOCA表的BLART字段值判断KOART的匹配条件,直接用数据库层面支持的CASE WHEN表达式改写即可,正确的WHERE条件如下:
WHERE acdoca~rldnr = '0L' AND acdoca~rbukrs = @company_code AND acdoca~belnr IN @document_no_range AND acdoca~gjahr = @year AND acdoca~koart = CASE acdoca~blart WHEN 'DY' THEN 'D' ELSE 'S' END
两种写法的适用场景说明:
- 当判断逻辑依赖数据库表的字段值时,必须使用SQL原生的CASE WHEN表达式,逻辑在数据库层执行,可以直接读取表字段内容
- 只有当判断逻辑完全依赖ABAP端已经声明赋值的变量时,才可以使用
@(COND...)主机表达式,该表达式会在ABAP端先计算出固定值再传入SQL执行
内容的提问来源于stack exchange,提问作者ekekakos
相关产品推荐
相关产品推荐

