sap abap 动态 SQL 编写

8 篇文章 0 订阅
5 篇文章 0 订阅

sap abap 动态 SQL 编写

REPORT ZPROGRAM_F0042.
" 动态SQL
TABLES:EKPO.
SELECT-OPTIONS: S_EBELN FOR EKPO-EBELN,  " 不用判断,因为这个是内表。
                S_MATNR FOR EKPO-MATNR,
                S_MATKL FOR EKPO-MATKL.
PARAMETERS: P_BUKRS TYPE BUKRS ,       "需要判断,只是给了个类型,没有具体数值。
       P_LGORT TYPE LGORt_D. " 默认是select 的事件start of selection
" 要求:1 AEDAT = '2001.06.19' 2\ NETWR= '1898.00'
"--------------定义变量--------------
DATA: LV_WHERE TYPE STRING.
DATA:LV_TMP_WHERE TYPE STRING.
DATA:LT_EKPO TYPE TABLE OF EKPO.
"公司代码是否为空?
if p_bukrs is not initial.
  concatenate lv_where 'bukrs = p_bukrs' 'and' into lv_where separated by space.
endif.
"库存地点是否为空
if p_lgort is not initial.
  concatenate lv_where 'lgort = p_lgort ' ' and ' into lv_where separated by space .
endif.
"日期,小数在设置默认的时候,要加上双引号,才可以查出数据。
CONCATENATE LV_WHERE 'AEDAT ='  '''20010619 ''' 'AND' INTO LV_WHERE SEPARATED BY SPACE.
CONCATENATE LV_WHERE 'NETWR ='  '''1898.00''' ' AND ' INTO LV_WHERE SEPARATED BY SPACE.
"select-option 为空时,查出的是所有的数据,不为空时,按照内表里的内容来查
CONCATENATE lv_where 'ebeln in s_ebeln and matnr in s_matnr and matkl in s_matkl'
into lv_where separated by space.
"执行SQL语句:
if lv_where is NOT initial.
  select * from ekpo into TABLE lt_ekpo where (lv_where).
    else.
      select * from ekpo into TABLE lt_ekpo.
endif.
" BREAK-POINT.
"----------------去掉 拼接字符串 中最右边的and
SHIFT lv_where by 1 PLACES left ."往左方向移动1位,
shift lv_where left deleting leading 'AND'." 删除左边的 AND LEFT 和 LEADING配对使用
shift lv_where RIGHT DELETING TRAILING 'AND'." 删除右边边的 AND RIGHT 和 TRAILING配对使用
" 据说  AND 之间有内容的,中间的内容不会受到影响。AND AND 则保留

BREAK-POINT.

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值