【问题标题】:Oracle APEX 5.1 - How to sort selected values in a Shuttle controlOracle APEX 5.1 - 如何对 Shuttle 控件中的选定值进行排序
【发布时间】:2018-09-28 09:47:23
【问题描述】:

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

这些在基础表中存储为UK:France:Portugal

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

有没有办法按字母顺序对穿梭(右侧)中的选定值进行排序,也许通过选择国家时的动态操作?

如果没有,作为替代方案,我们是否可以使用后计算计算来对这些值进行排序和存储?

谢谢!

【问题讨论】:

    标签: sql oracle oracle-apex-5.1


    【解决方案1】:

    我不知道 Apex-solution,但我可以推荐 Oracle-solution

    这是一个示例:表 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>
    

    可能没问题;试一试。

    【讨论】:

    • 好主意!它的工作也一样,非常感谢。当然,如果有人知道如何在 APEX 中执行此操作而不使用触发器,那也将受到欢迎。
    • 不客气。如果您有空闲时间,可以尝试将该(触发)代码应用到 Apex。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多