Oracle APEX中如何插入复选框组选中的多个分类值
Oracle APEX 复选框组实现订单关联多分类实现方案
前置说明
单条订单关联多个分类属于多对多关系,你当前直接在order表存id_category的结构不适合这类场景(单条订单主记录会被拆成多行,冗余大量主表数据),推荐先新建一张订单-分类关联表,逻辑更清晰也更好维护:
-- 新建关联表(推荐执行,不想改表结构可以跳过,后续逻辑适配原表即可) create table order_category_rel ( id_order number not null, id_category number not null, constraint pk_order_cat_rel primary key (id_order, id_category), constraint fk_rel_order foreign key (id_order) references "ORDER"(id_order), constraint fk_rel_cat foreign key (id_category) references category(id_category) );
具体实现步骤
- 表单页创建复选框组项
打开订单新建/编辑表单页面,新建页面项,类型选择复选框组,项名按APEX命名规则设为P{页面号}_ORDER_CATEGORIES,比如页面是10页就叫P10_ORDER_CATEGORIES:
- 值列表(LOV)配置:类型选「SQL查询」,输入以下SQL,让复选框显示分类名称、实际提交分类ID:
select description d, id_category r from category order by description - 如果是编辑已有订单的页面,配置项的源属性:源类型选「SQL查询(返回冒号分隔的值)」,SQL写以下内容,自动回显已经关联的分类:
(如果用原-- 用关联表的版本 select listagg(id_category, ':') within group (order by id_category) from order_category_rel where id_order = :P{页面号}_ID_ORDERorder表存关联,就把上面SQL的表名换成"ORDER"即可,P{页面号}_ID_ORDER是你页面上存储订单主键的隐藏项名)
- 表单页创建复选框组项
- 配置提交后的数据存储逻辑
在页面处理区域,新建一个「PL/SQL代码」类型的处理,执行顺序放在APEX自动生成的订单主表单行处理(也就是写入order主表数据的那个处理)之后,代码内容如下:
给这个PL/SQL处理加触发条件:当表单的保存/提交按钮被点击时执行,避免其他页面操作误触发数据删除写入。-- 1. 先清除当前订单原有分类关联,避免残留旧数据 delete from order_category_rel where id_order = :P{页面号}_ID_ORDER; -- 用原order表的话替换成:delete from "ORDER" where id_order = :P{页面号}_ID_ORDER; -- 2. 把复选框选中的分类批量插入关联表,APEX复选框多值默认用冒号分隔,用内置函数直接拆分 insert into order_category_rel (id_order, id_category) select :P{页面号}_ID_ORDER, column_value from table(apex_string.split(:P{页面号}_ORDER_CATEGORIES, ':')); /* 用原order表的话替换成下面的插入语句,注意把主表必填字段补上 insert into "ORDER" (id_order, id_category, 其他主表必填字段名...) select :P{页面号}_ID_ORDER, column_value, :P{页面号}_其他主表对应项名... from table(apex_string.split(:P{页面号}_ORDER_CATEGORIES, ':')); */- 配置提交后的数据存储逻辑
注意事项:
order是Oracle保留关键字,所有SQL里引用这个表必须加双引号写成"ORDER",否则会报语法错误,业务表命名建议避开这类保留字。- 如果你的分类ID本身包含冒号,需要把复选框组的「分隔符」属性改成其他不会出现在ID里的特殊字符(比如竖线
|、逗号),对应上面SQL里的拼接符、拆分符同步替换即可。- 复选框组如果没有选中任何值,提交时对应的项值是空,上面的逻辑会自动清空该订单的所有分类关联,不需要额外写判空逻辑。
内容的提问来源于stack exchange,提问作者Marta
相关产品推荐
相关产品推荐

