公司有个需求 ,当按用英文名字来进行查询时,可以实现不区分供应商名字大小写进行模糊查询。
例如:如果用户输入‘br’ 那么可以查出名字含有 ‘BR’、‘bR’、‘Br’ 、‘br’ 的供应商来。利用SAP 常规的 Open SQL 是实现不了的。 只能利用 Native SQL 语句。
在SAP 官网有这个资料,同学们可以过去学习一下:
Native SQL (SAP Library - ABAP Programming (BC-ABA))
我首先测试了下面种方式,这种方式可以写在 ABAP 程序里,但写在RFC不行。
Native SQL Statements in ABAP Programs
REPORT demo_native_sql.
DATA: BEGIN OF wa,
connid TYPE spfli-connid,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
END OF wa.
DATA c1 TYPE spfli-carrid VALUE 'LH'.
EXEC SQL PERFORMING loop_output.
SELECT connid, cityfrom, cityto
INTO :wa
FROM spfli
WHERE carrid = :c1
ENDEXEC.
FORM loop_output.
WRITE: / wa-connid, wa-cityfrom, wa-cityto.
ENDFORM.
然后我用了游标的方式。
DATA: BEGIN OF ls_lfa1,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
"mcod1 TYPE lfa1-mcod1,
END OF ls_lfa1.
DATA: lt_lfa1 LIKE TABLE OF ls_lfa1.
DATA: search_term TYPE string.
IF i_name is not INITIAL .
search_term = |%{ to_lower( i_name ) }%|.
*
" 利用 NATIVE SQL 进行 按供应商名字不区分大小写查询
EXEC SQL.
OPEN c1 FOR
SELECT lifnr, name1
FROM lfa1
WHERE LOWER(name1) LIKE :search_term
and MANDT = :SY-MANDT
ENDEXEC.
DO.
EXEC SQL.
FETCH NEXT c1 INTO :ls_lfa1
ENDEXEC.
IF sy-subrc <> 0.
EXIT.
ELSE.
APPEND ls_lfa1 TO lt_lfa1.
ENDIF.
ENDDO.
EXEC SQL.
CLOSE c1
ENDEXEC.
ENDIF.
最后结果呈现如下: 用户输入 br