利用 NATIVE SQL 实现不区分供应商名字大小写进行模糊查询

公司有个需求 ,当按用英文名字来进行查询时,可以实现不区分供应商名字大小写进行模糊查询。

例如:如果用户输入'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

相关推荐
mengzhi啊5 小时前
把数据存入sql数据库。qt,c++。
数据库·sql·qt
驭渊的小故事7 小时前
MyBatis-Plus 实战指南:从基础 CRUD 到条件构造器与自定义 SQL(二)
数据库·sql·mybatis
tryxr8 小时前
如何优化sql
java·数据库·sql·数据库优化
ly76898 小时前
读懂 PostgreSQL 执行计划:从 EXPLAIN 输出定位 Spring Boot 慢 SQL 的代价估算偏差
spring boot·sql·postgresql·执行计划·explain analyze·慢sql优化
子沫202011 小时前
mysql慢sql
sql·mysql
爱喝水的鱼丶13 小时前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
余槐i20 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据工匠老o1 天前
一张 5 亿行的表按月分区后,清理历史数据从几小时变成了几秒
数据库·sql
hwscom1 天前
几分钟开防护,SQL和XSS注入全被护卫神挡住
数据库·sql·xss
挖掘狂人1 天前
SQL 注入:一行代码如何撬开整个数据库
后端·sql·数据分析