如何避免向APEX_COLLECTION中添加重复实验室检验项目?
解决方案
1. 修正后端逻辑(阻止重复添加)
你的现有代码未对重复项做拦截处理,即使检测到项目已存在仍会执行添加操作。以下是修正后的PL/SQL代码:
Declare v_seq_id number; begin -- 确保目标集合存在 if not apex_collection.collection_exists('TESTS') then apex_collection.create_collection('TESTS'); end if; -- 查询当前检验项目是否已在集合中 select seq_id into v_seq_id from apex_collections where collection_name='TESTS' and c001 = :P58_TEST_NO; -- 若查询到结果,说明项目已存在,抛出提示 apex_error.add_error( p_message => 'Test already exists', p_display_location => apex_error.c_inline_in_notification ); exception when NO_DATA_FOUND then -- 项目不存在,执行添加操作 apex_collection.add_member( p_collection_name => 'TESTS', p_c001 => :P58_TEST_NO , p_c002 => :P58_TEST_NAME , p_c003 => :P58_SECTION , p_c004 => :P58_TESTPRICE , p_c005 => :P58_TESTVAT , p_c006 => :P58_TESTTOTAL ); end;
2. 实现选择时即时验证
要在选择检验项目时触发即时验证,需通过动态动作绑定组件事件:
- 找到页面上的检验项目选择组件(如下拉选单)
- 为该组件创建动态动作:
- 触发条件:选择
Change(值改变时触发) - 动作类型:选择
Execute PL/SQL Code,粘贴上述修正后的代码 - 配置Page Items to Submit:添加
P58_TEST_NO, P58_TEST_NAME, P58_SECTION, P58_TESTPRICE, P58_TESTVAT, P58_TESTTOTAL,确保所有必要参数提交到后端 - 若需刷新集合展示区域,可在Page Items to Return中添加对应区域或页面项
- 可选勾选Show Processing,让用户看到处理状态
- 触发条件:选择
3. 核心说明
- 原代码未终止重复项的添加流程,修正后通过捕获
NO_DATA_FOUND异常区分“项目不存在”的场景,存在则直接抛出内联提示 - 使用
apex_error.add_error可在页面内显示提示,无需跳转页面 - 绑定动态动作到组件的
Change事件,实现选择项目时即时校验,无需等待提交按钮点击
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

