sql - Oracle APEX 5.1 - 如何对 Shuttle 控件中的选定值进行排序
问题描述
我有一个带有国家列表的穿梭控制。所以用户可以选择多个国家,例如:UK, France, Portugal
. 顺序取决于用户如何选择或移动选择(见图)
这些存储UK:France:Portugal
在基础表中。
问题是我需要按字母顺序存储这些国家/地区,因为 UK:France:Portugal 与France:Portugal:UK
. 我知道在理想的世界中,这些都保存在单独的行中,但不幸的是,这对我来说不是一个选择。
有没有办法按字母顺序对穿梭机(右侧)中的选定值进行排序,可能是通过选择国家时的动态操作?
如果没有,作为替代方案,我们可以使用后计算计算来排序和存储这些值吗?
谢谢!
解决方案
我不知道Apex-solution,但我可以建议Oracle-solution。
这是一个示例: tabletest
存储有关国家/地区的信息:
SQL> create table test (id number, countries varchar2(30));
Table created.
数据库触发器对countries
列中的值进行排序。如何?它将冒号分隔的值字符串拆分为行(这就是regexp
andconnect 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>
可能没问题;试试看。
推荐阅读
- excel - 只有一个条目可用时获取组合框值
- c++ - 在另一个模板中包装一个模板
- python - 检查函数的任何(快速)方法是恒定的/几乎恒定的?
- java - 如何使用 Android InputMethodService 从我的其他服务发送关键事件?
- mysql - 尽管设置正确,Aurora Serverless MySQL 仍给出“索引列大小太大”
- javascript - 用户提交表单后在 Web 应用程序上发送推送通知
- postgresql - 有没有办法以区分大小写的方式使用 ::regclass ?
- javascript - 为什么我的猫鼬数组没有填充,甚至没有存储值?
- angular - 在 Angular/Karma 中模拟 DOCUMENT
- r - 如何更改 ggplot 上的重要性栏的类型?