基于计算值的oracle apex主/明细关系?

时间:2018-03-07 13:30:07

标签: oracle-apex master-detail

Oracle Apex 5.1中,我想创建一个master/detail表单,其中关系基于计算值。例如,主值为'ABC_123',详细信息值类似于“\\aaaa\bbbb\ABC_123_03-MAR-2017.txt”。对于主值“ABC_123”,我想返回包含“ABC_123”的所有详细记录。我无法更改数据库表,因为这是供应商软件。有没有办法在Apex中执行此操作?

1 个答案:

答案 0 :(得分:2)

您必须重新设计主 - 细节关系。以下是:由于您在主表中已有适当的列,因此无需执行任何操作。假设它的源查询如下所示:

select id, name, master_value
from master_table

对于详细信息表单,其查询如下所示:

select some_date, some_name,
  old_relationship_column      --> this is used to currently create relationship
  detail_value                 --> it is \\aaaa\bbbb\ABC_123_03-MAR-2017.txt
from detail_table

您必须找到一种提取价值的方法,然后将其与主表单相结合。例如:

SQL> with test (col) as
  2    (select '\\aaaa\bbbb\ABC_123_03-MAR-2017.txt' from dual)
  3  select
  4    substr(col,
  5           instr(col, '\', 1, 4) + 1,
  6           instr(col, '-') - instr(col, '\', 1, 4) - 4) new_rel_col
  7  from test;

NEW_REL
-------
ABC_123

详细信息查询将是

select some_date, some_name,
  old_relationship_column,      --> irrelevant in new design
  detail_value,                 --> it is \\aaaa\bbbb\ABC_123_03-MAR-2017.txt
  --
  substr(detail_value, 
     instr(detail_value, '\', 1, 4) + 1, 
     instr(detail_value, '-') - instr(detail_value, '\', 1, 4) - 4) 
     new_relationship_column             --> oh yes, we'll use it!
from detail_table

现在,转到详细信息表单的OLD_RELATIONSHIP_COLUMN属性,并从其主列属性中删除值。

接下来,转到NEW_RELATIONSHIP_COLUMN属性并将设置其主列属性转换为主表单的MASTER_VALUE列。

它就是 - 运行表格 - 如果一切都设置正确 - 你会有一个新的关系活着&踢。我怎么知道?刚试过它。