Oracle APEX 5.1 - 如何对 Shuttle 控件中的选定值进行排序

Oracle APEX 5.1 - How to sort selected values in a Shuttle control

我有一个带有国家列表的穿梭控件。所以用户可以 select 多个国家,例如:UK, France, Portugal。顺序取决于用户 select 或移动选项的方式(见图)

这些在底层 table 中存储为 UK:France:Portugal

问题是我需要按字母顺序存储这些国家/地区,因为 UK:France:Portugal 与 France:Portugal:UK 不同。我知道在理想的世界中,这些保存在单独的行中,但不幸的是,这对我来说不是一个选项。

有没有一种方法可以按字母顺序对航天飞机(右侧)中的 selected 值进行排序,也许是在 selecting 个国家/地区时通过动态操作?

如果没有,作为替代方案,我们可以使用 Post 计算来排序和存储这些值吗?

谢谢!

我不知道 Apex 解决方案,但我可以建议 Oracle 解决方案

这是一个示例:table test 存储有关国家/地区的信息:

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

Table created.

数据库触发器对 countries 列中的值进行排序。如何?它将以冒号分隔的值字符串拆分成行(这就是 regexpconnect 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>

可能没问题;试一试。