【发布时间】:2018-03-07 13:30:07
【问题描述】:
在Oracle Apex 5.1 中,我想创建一个master/detail 表单,其中关系基于计算值。例如,主值是'ABC_123',详细值类似于“\\aaaa\bbbb\ABC_123_03-MAR-2017.txt”。对于主值'ABC_123',我想返回所有包含'ABC_123'的详细记录。我无法更改数据库表,因为这是供应商软件。 Apex有没有办法做到这一点?
【问题讨论】:
在Oracle Apex 5.1 中,我想创建一个master/detail 表单,其中关系基于计算值。例如,主值是'ABC_123',详细值类似于“\\aaaa\bbbb\ABC_123_03-MAR-2017.txt”。对于主值'ABC_123',我想返回所有包含'ABC_123'的详细记录。我无法更改数据库表,因为这是供应商软件。 Apex有没有办法做到这一点?
【问题讨论】:
您必须重新设计主从关系。方法如下:由于您已经在主表中有一个适当的列,因此无需执行任何操作。假设它的源查询如下所示:
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 列。
就是这样 - 运行表单并且 - 如果一切设置正确 - 你将拥有一个充满活力和活力的新关系。我怎么知道?刚刚测试过了。
【讨论】: