【问题标题】:Column Validation not firing in Interactive Grid Oracle APEX在交互式网格 Oracle APEX 中未触发列验证
【发布时间】:2020-10-26 15:14:23
【问题描述】:

我正在 Oracle APEX 中开发一个简单的应用程序,其中一个要求是在将重复列(也是表的 UK)保存到交互式网格时创建错误消息。我创建了一个支持包,然后在 APEX 中创建了一个列验证,它调用了支持包中的函数。

当我第一次实现代码和调用时,一切正常,并且显示了正确的错误消息。但是,我认为我在不知不觉中修改了属性设置或其他内容,因为现在我无法触发验证 - 如果用户输入重复的列值并按保存,他们会收到 Oracle 引发的通用“约束冲突”错误消息。此应用程序中唯一的 IG 流程是自动行处理 - 保存按钮。

有谁知道为什么忽略列验证?我已经查看了“违反约束”的错误堆栈,我看到的只是保存过程和 Oracles 通用错误消息。

支持包功能:

`FUNCTION Prod_Family_Exists (
     i_id                    IN NUMBER
    ,i_prod_family           IN VARCHAR2
        ) RETURN BOOLEAN IS
  v_cnt        NUMBER;
BEGIN
  SELECT COUNT(*)
    INTO v_cnt
    FROM adm_prod_families 
   WHERE prod_family = i_prod_family
     AND id <> i_id
   ;
   
   IF v_cnt = 0 THEN
    RETURN(FALSE);
   ELSE
    RETURN(TRUE);
   END IF;

EXCEPTION
  WHEN OTHERS THEN
    RETURN(FALSE);
    
END Prod_Family_Exists;

END Z_TEST;`

APEX 中的验证调用 - PL/SQL 函数(返回布尔值):

BEGIN 

    IF z_test.prod_family_exists( i_id                => :id
                                 ,i_prod_family       => :prod_family)
    THEN 
      RETURN FALSE;
    ELSE
      RETURN TRUE;
    END IF;
END;

根据下图和我提供的代码,我的自定义错误消息只有在验证结果返回 FALSE 时才会出现,对吗?代码不好吗?

【问题讨论】:

    标签: oracle plsql oracle-apex


    【解决方案1】:

    我想通了。需要修改支持包函数的验证调用代码。新代码:

    BEGIN 
        IF z_test.prod_family_exists( i_id             => NVL(:id,0)
                                     ,i_prod_family    => :prod_family)
        THEN 
          RETURN FALSE;
        ELSE
          RETURN TRUE;
        END IF;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2023-04-07
      相关资源
      最近更新 更多