Apex 21.2中如何在PL/SQL读取CheckboxGroup选中值
解决Apex 21.2中Checkbox Group值无法在PL/SQL动态动作中读取的问题
核心原因
动态动作执行服务器端PL/SQL代码时,默认不会自动将未提交的页面项值同步到会话状态,导致PL/SQL无法获取用户勾选的最新值。
具体解决步骤
配置动态动作的提交项
打开你的动态动作,找到「Execute Server-side Code」的属性设置,在**「Page Items to Submit」**输入框中添加P302_MINISTRY_GROUP和P302_PRIM_KEY。这一步会强制将这两个页面项的当前值提交到服务器会话,PL/SQL就能读取到最新的勾选值。验证分隔符匹配
Apex的Checkbox Group默认使用冒号(:)作为选中值的分隔符,你代码中使用apex_string.split(:P302_MINISTRY_GROUP, ':')是正确的,无需修改。如果曾手动修改过分隔符,需确保split的参数和字段设置一致。调试确认值传递
可以在PL/SQL代码开头添加调试语句,确认值是否正常传递:apex_debug.message('P302_MINISTRY_GROUP: %s', :P302_MINISTRY_GROUP);开启Apex调试模式后,查看调试日志,就能直观看到字段值是否被正确提交。
排除其他干扰设置
- 确认
P302_MINISTRY_GROUP字段未设置**「Server-side Condition」**导致其被隐藏或不渲染; - 检查字段的**「Read Only」**属性是否被意外开启,这会阻止用户修改值并提交。
- 确认
修正后的PL/SQL代码示例(可选)
如果需要处理勾选值的增删逻辑,可完善代码如下(确保提交项配置正确后):
declare l_dummy number; l_volunteer_pk number; begin l_volunteer_pk := :P302_PRIM_KEY; -- 先删除未勾选的记录(可选,根据需求调整) delete from vol_contact_ministry where contact_fkey = l_volunteer_pk and ministry_fkey not in (select column_value from table(apex_string.split(:P302_MINISTRY_GROUP, ':'))); -- 插入新增的勾选记录 for cur_r in (select column_value from table(apex_string.split(:P302_MINISTRY_GROUP, ':'))) loop begin select prim_key into l_dummy from vol_contact_ministry where ministry_fkey = cur_r.column_value and contact_fkey = l_volunteer_pk; exception when no_data_found then insert into vol_contact_ministry (ministry_fkey, contact_fkey, status) values (cur_r.column_value, l_volunteer_pk, 'Active'); end; end loop; end;
内容的提问来源于stack exchange,提问作者user3138025
相关产品推荐
相关产品推荐

