二维码

[基础语法] ABAP动态查询条件where的用法

Twilight发表于 2014-10-27 15:03Twilight 最后回复于 2014-10-27 15:03 [复制链接] 9661 0

select from where条件语句,我们经常遇到会根据屏幕的条件,来决定where条件的case,即where条件不固定。这里我们可以用动态条件来解决此类问题。

用法实例:
  1.   DATA:lv_where TYPE string.
  2. *动态条件
  3.   IF p_expire = 'X' AND p_delete = 'X'.
  4.     CONCATENATE 'g~endda >= '''sy-datum''' AND g~dele_flag = '''SPACE'''' INTO lv_where.
  5.   ELSEIF p_expire = 'X'.
  6.     CONCATENATE 'g~endda >= '''sy-datum'''' INTO lv_where.
  7.   ELSEIF p_delete = 'X'.
  8.     CONCATENATE 'g~dele_flag = '''SPACE'''' INTO lv_where.
  9.   ENDIF.
  10.   SELECT g~matnr
  11.          g~lifnr
  12.          g~werks
  13.          g~werks_gr
  14.          g~goods_cl
  15.          g~min_stock
  16.          g~cxbxs_fo
  17.          g~cxbxs_re
  18.          g~begda
  19.          g~endda
  20.          g~dele_flag
  21.          g~zbz
  22.          m~prdha
  23.          m~matkl
  24.          g~zdate
  25.          g~ztime
  26.          g~bname
  27.   INTO TABLE gt_zpugoodsclass
  28.   FROM zpugoodsclass AS g
  29.   INNER JOIN mara AS m ON g~matnr = m~matnr
  30.   WHERE g~werks IN s_werks
  31.     AND m~matnr IN s_matnr
  32.     AND m~prdha IN s_prdha
  33.     AND m~matkl IN s_matkl
  34.     AND g~lifnr IN s_lifnr
  35.     AND g~goods_cl = p_goocl
  36.     AND (lv_where).
复制代码

我们先来看一下正确的lv_where条件解析
动态查询条件where 1.png
注意这里的CONCATENATE用法, '''sy-datum'''反转义时日期会有引号;
常规的CONCATENATE写法,日期没有引号,select执行查不到数据,因为会当成数值执行,非日期
动态查询条件where 2.png
CONCATENATE后不能加SEPARATED BY space,select执行也查不到数据
动态查询条件where 3.png
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表