OData 服务中 LCHR 字段的 LIKE 过滤

2023-12-12

我正在开发一个使用 SAP Gateway 的 OData 服务的 UI5 应用程序,我在其中实现了一个生成 SQL 的搜索功能where健康)状况。条件的一部分如下所示:... OR DESCRIPTION LIKE '%searchString%'...。在我的数据库表中,我有一个字段DESCRIPTION这是类型LCHR length 32000。唯一的问题是这个领域DESCRIPTION不能在WHERE clause.

通过 OData 服务在数据库表中搜索长字符串的正确方法是什么?我是否需要对搜索功能进行硬编码,或者是否有一些更简洁的方法?


答案是CDS表函数。基本思想是将搜索下推到 HANA,其实现方式是AMDP。我做了一些本地测试,通过具体代码来回答这个问题。

我创建了一个表zza_test

@EndUserText.label : 'TEST'
@AbapCatalog.enhancementCategory : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #LIMITED
define table zza_test {
    key mandt : mandt not null;
    key bukrs : bukrs not null;
    cnt       : abap.int4;
    des       : abap.lchr(2000);
}

定义了CDS表函数zza_test_tf带参数search_str.

@EndUserText.label: 'TEST TF'
define table function zza_test_tf
with parameters
    @Environment.systemField: #CLIENT
       clnt   :abap.clnt,
       search_str : char255
returns
{
    mandt : mandt;
    bukrs : bukrs;
    cnt   : abap.int4;
    des   : abap.lchr(2000);

}
implemented by method zcl_zza_test_tf=>search_des;

创建了一个类zcl_zza_test_tf带接口if_amdp_marker_hdb并实现该方法search_des

class zcl_zza_test_tf definition
public
final
create public .

public section.
  interfaces if_amdp_marker_hdb.
  class-methods search_des

      for table function zza_test_tf.
 endclass.

class zcl_zza_test_tf implementation.
   
   method search_des by database function for hdb
      language sqlscript
      options read-only
      using zza_test.
   
      return select mandt,bukrs, cnt, des
                from zza_test where des like concat( concat( '%', 
                   :search_str), '%');

   endmethod.

endclass.

现在我们有了一个带参数的 CDS 表函数。运行CDS视图并输入搜索参数以获取结果。您甚至可以在 AMDP 实现中定义 HANA SQL模糊搜索.

为了满足要求,您可以在 Gateway 层的 CDS 视图上实现 Open SQL 选择。

data:
    lt_test type standard table of ZZA_TEST_TF.

select * from ZZA_TEST_TF( search_str = 'DUM' ) into table @lt_test.

一切都应该有效。希望能帮助到你。谢谢你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OData 服务中 LCHR 字段的 LIKE 过滤 的相关文章

  • 将两个表合并为一个输出

    假设我有两张表 已知营业时间 ChargeNum CategoryID Month Hours 111111 1 2 1 09 10 111111 1 3 1 09 30 111111 1 4 1 09 50 222222 1 3 1 09
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • Oracle SQL 函数中可以有 commit 语句吗

    在 SQL 函数中使用 COMMIT 语句是否可能 有意义 从技术上来说 答案是肯定的 你can请执行下列操作 create or replace function committest return number as begin upd
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 与 JSONModel 相比,输入验证不适用于 v2.ODataModel

    在当前的项目中 我有一个简单的形式 https openui5 hana ondemand com api sap ui layout form SimpleForm 在一个视图上 在此视图上绑定 JSONModel validateVal
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • mysql 不带空字符串和 NULL 的不同值

    如何检索没有空字符串值和NULL值的mysql不同值 SELECT DISTINCT CON EMAILADDRESS AS E MAIL FROM STUDENT INNER JOIN CONTACT CON ON STUDENT CON
  • 将自定义导航属性添加到 OData Web API 控制器

    我有一个 OData v3 Web API 项目 它使用实体框架代码优先模型 主要类别是Coupon 它有一个列表 这实际上是子类型 ItemRequirement 和 BasketRequirement 的 2 元素集合 我希望能够说 o
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • PostgreSQL函数中sql语言和plpgsql语言的区别

    我很新数据库开发所以我对下面的例子有一些疑问 函数 f1 语言 SQL create or replace function f1 istr varchar returns text as select hello varchar istr
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了
  • 如何使用 SQL 查询创建逗号分隔的列表?

    我有 3 个表 名为 应用程序 ID 名称 资源 id 名称 应用程序资源 id app id resource id 我想在 GUI 上显示所有资源名称的表格 在每一行的一个单元格中 我想列出该资源的所有应用程序 以逗号分隔 所以问题是
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0

随机推荐