Oracle11g Oracle APEX搜索引擎

Oracle11g Oracle APEX搜索引擎,oracle11g,oracle-apex,Oracle11g,Oracle Apex,我使用的是Oracle APEX 4.2.6和Oracle DB 11gR2 我有一份互动报告,上面有客户名单 最终用户可以修改客户端的名称 我的问题是,我必须找到一种方法,允许最终用户通过使用他的旧名称来查找修改后的客户端 例如,最终用户将客户机的名称从旧名称修改为新名称 在交互式报告的serach引擎中,最终用户必须能够通过按旧名称旧名称搜索客户机来找到该客户机 是否有办法在APEX端或数据库端管理这种情况。这在很大程度上是数据库问题,而不是APEX问题。当用户修改客户机名称时,您将需要在某

我使用的是Oracle APEX 4.2.6和Oracle DB 11gR2

我有一份互动报告,上面有客户名单

最终用户可以修改客户端的名称

我的问题是,我必须找到一种方法,允许最终用户通过使用他的旧名称来查找修改后的客户端

例如,最终用户将客户机的名称从旧名称修改为新名称

在交互式报告的serach引擎中,最终用户必须能够通过按旧名称旧名称搜索客户机来找到该客户机


是否有办法在APEX端或数据库端管理这种情况。

这在很大程度上是数据库问题,而不是APEX问题。当用户修改客户机名称时,您将需要在某个位置记录旧名称:这可能只是客户机表上的一个旧名称列,它只支持知道单个名称更改的前一个名称,也可能是一个客户机名称历史表,每次更改客户机名称时都会向其添加一行

完成此操作后,可以修改交互式报表的SQL,以搜索旧名称和新名称以查找客户端,例如:

select ...
  from clients
 where (name like :P1_NAME or old_name like :P1_NAME)


请注意,我认为您需要为名称过滤器创建一个页面项,因为IR的内置过滤器只能搜索报告中显示的数据,而以前的名称可能不会。具有附加列可能不是一个可扩展的解决方案。如果另一个用户再次更改名称怎么办?再说一遍?再说一遍

存储此数据的更好方法是将客户机的主键与对象版本标识符组合在一起唯一标识的行中—可以是数字、时间戳或日期范围。这是Oracle自己在其许多企业应用程序中使用的一种方法

数据示例如下所示

一,。使用对象版本号

客户端Id |客户端名称|对象版本号 1 |鲍勃| 1

1 |萨姆| 2

1 | Ed | 3

这里,每次用户更改名称时,都会创建一个额外的行,保持相同的client_id值,但将对象版本号增加1。最高的ovn表示最新的值。您还可以创建一个名为latest_record的列,并在创建新记录时插入Y值,以显示这是最新记录,并将以前最新记录中的值重置为N。类似地,您可以存储时间戳而不是数字,并使用该时间戳来确定最新记录

使用日期范围 客户Id |客户名称|开始日期|结束日期 1 |鲍勃| 2017年1月1日| 2017年1月31日

1 | Sam | 2017年2月2日| 2017年3月2日

2017年3月3日第1版|

在这种方法中,您要指定名称有效的时间段。一个用例将是一个人在婚后采用其伴侣的姓氏。在这种情况下,一个名字从出生时起至结婚之日有效,另一个名字从结婚之日起有效

以这种格式准备好数据结构后,在apex报告中,您只需要查询单名列。我觉得在这种情况下,额外的表和列是不必要的开销

问候,,
SJ

关于您的最后一句话:旧的_名称不必显示,但应选择它,可在“操作”菜单-选择列中找到。用户可以创建一个显示显示列和其他列的过滤器-旧的名称将出现在其他列中。尽管如此,除非屏幕上显示了快速搜索,否则快速搜索是无效的,因为你是对的。如果你有新问题,请单击按钮提问。如果此问题有助于提供上下文,请包含指向此问题的链接。-@乌米尔,嗯?不知道你的意思。这不是一个新问题。这是一个答案。
select ...
  from clients c
 where (c.name like :P1_NAME or exists (select null
                                          from client_name_history h 
                                         where h.client_id = c.client_id
                                           and h.name like :P1_NAME)