【问题标题】:Oracle APEX Search EngineOracle APEX 搜索引擎
【发布时间】:2018-01-17 10:27:57
【问题描述】:

我正在使用 Oracle APEX 4.2.6 和 Oracle DB 11gR2

我有一个显示客户列表的交互式报告。

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

我的问题是我必须找到一种方法,让最终用户通过使用他的旧名称进行搜索来找到修改后的客户端。

例如,最终用户将客户端名称从OLD NAME修改为NEW NAME

在交互式报告的搜索引擎中,最终用户必须能够通过其旧名称OLD NAME

来找到客户

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

【问题讨论】:

    标签: oracle11g oracle-apex


    【解决方案1】:

    这在很大程度上是一个数据库问题,而不是 APEX 问题。当用户修改客户端名称时,您需要在某处记录旧名称:这可能只是 CLIENTS 表上的 OLD_NAME 列(仅支持知道以前的名称以进行单个名称更改),或者它可能是每次更改客户端名称时都会添加一行的 CLIENT_NAME_HISTORY 表。

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

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

    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)
    

    请注意,我认为您需要为名称过滤器创建一个页面项,因为 IR 的内置过滤器只能搜索报告中显示的数据,而以前的名称不会(大概)。

    【讨论】:

    • 关于您的最后一句话:OLD_NAME 不必显示,但应该选中(可以在“操作”菜单 - 选择列中找到)。用户可以创建一个过滤器,它同时显示“Displayed”和“Other”列 - OLD_NAME 将在那些 Other 列中。但是,快速搜索 不起作用,除非它实际上显示在屏幕上,但您是对的。
    【解决方案2】:

    拥有额外的列可能不是“可扩展”的解决方案。如果另一个用户再次更改名称怎么办?然后再次?再来一次?

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

    数据示例如下所示。

    1.) 使用对象版本号

    客户 ID |客户名称 |对象版本号

    1 |鲍勃 | 1

    1 |山姆 | 2

    1 |埃德 | 3


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

    1. 使用日期范围

    客户 ID |客户名称 |开始日期 |结束日期

    1 |鲍勃 | 2017 年 1 月 1 日 | 2017 年 1 月 31 日

    1 |山姆 | 2017 年 2 月 2 日 | 2017 年 3 月 2 日

    1 |埃德 | 2017 年 3 月 3 日 |


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


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

    问候, SJ

    【讨论】:

    • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
    • @Umair 嗯?不明白你的意思。这不是一个新问题。这是一个答案。
    猜你喜欢
    • 2016-12-31
    • 2011-09-15
    • 2015-04-03
    • 2011-07-01
    • 2011-05-21
    • 2011-01-19
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多