Oracle APEX 5.1 - Как сортировать выбранные значения в элементе управления Shuttle - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть управление челноком со списком стран.Таким образом, пользователь может выбрать несколько стран, например: UK, France, Portugal.Порядок зависит от того, как пользователь выбирает или перемещает выбор (см. Рис.)

enter image description here.

Они хранятся в базовой таблице как UK:France:Portugal.

Проблема заключается в том, что эти страны должны храниться в алфавитном порядке, поскольку Великобритания: Франция: Португалия отличается от France:Portugal:UK,Я знаю, что в идеальном мире они сохраняются в отдельных строках, но, к сожалению, это не вариант для меня.

Есть ли способ сортировки выбранных значений внутри челнока (справа) по алфавиту, может бытьс помощью динамического действия при выборе стран?

Если нет, то как альтернатива, можем ли мы выполнить вычисление после расчета для сортировки и сохранения этих значений?

Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Я не знаю Apex-решение , но могу предложить Oracle-решение .

Вот пример: таблица test хранит информацию о странах:

SQL> create table test (id number, countries varchar2(30));

Table created.

Триггер базы данных сортирует значения в столбце countries.Как?Он разбивает строку значений, разделенных двоеточиями, на строки (это то, что делают regexp и connect by), а затем объединяет их обратно в другую строку значений, разделенных двоеточиями (используя listagg), но на этот раз сортирует (order by 1):

SQL> create or replace trigger trg_biu_cou
  2    before insert or update on test
  3    for each row
  4  begin
  5    select listagg(regexp_substr(:new.countries, '[^:]+', 1, level), ':') within group (order by 1)
  6    into :new.countries
  7    from dual
  8    connect by level <= regexp_count(:new.countries, ':') + 1;
  9  end;
 10  /

Trigger created.

ОК, посмотрим, как это будет работать:

SQL> insert into test (id, countries) values (1, 'UK:France:Portugal');

1 row created.

SQL> select * from test;

        ID COUNTRIES
---------- ------------------------------
         1 France:Portugal:UK

SQL> update test set countries = 'New Zealand:Croatia:Hungary' where id = 1;

1 row updated.

SQL> select * from test;

        ID COUNTRIES
---------- ------------------------------
         1 Croatia:Hungary:New Zealand

SQL>

Может быть, все в порядке;попробуй.

...