oracle apex отношения мастер / деталь на основе вычисленного значения?

В Oracle Apex 5.1 я хотел бы создать master/detail форму, в которой отношение основано на вычисленном значении. Например, главное значение - 'ABC_123', а подробное значение - как «\\aaaa\bbbb\ABC_123_03-MAR-2017.txt». Для основного значения «ABC_123» я хочу вернуть все подробные записи, содержащие «ABC_123». Я не могу изменить таблицы базы данных, потому что это программное обеспечение поставщика. Есть ли способ сделать это в Apex?


person W Penfold    schedule 07.03.2018    source источник


Ответы (1)


Вам придется заново спроектировать отношения "главный-деталь". Вот как: поскольку у вас уже есть соответствующий столбец в главной таблице, ничего не поделаешь. Предположим, что его исходный запрос выглядит так:

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 Column значение столбца MASTER_VALUE основной формы.

Вот и все - запустите форму и - если все настроено правильно - у вас будут новые отношения живыми и здоровыми. Откуда мне знать? Просто протестировал.

person Littlefoot    schedule 07.03.2018
comment
Отлично, я попробую - person W Penfold; 08.03.2018
comment
Это отлично сработало. Поскольку я добавлял интерактивную сетку на существующую страницу, мне пришлось дополнительно указать «главный регион», прежде чем Apex позволил бы мне установить значение главного столбца. Спасибо за вашу помощь! - person W Penfold; 08.03.2018