You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:12:10