【发布时间】: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