gpt4 book ai didi

oracle - 我可以对交互式网格行删除进行验证吗?

转载 作者:行者123 更新时间:2023-12-04 02:59:12 24 4
gpt4 key购买 nike

我正在尝试在交互式网格上添加验证,主要是检查是否有任何内容依赖于该行,因此我可以显示用户友好的错误而不是“Ajax 调用返回的服务器错误 ORA-20987:APEX - ORA-02292: integrity constraint (FOO.MY_CONSTRAINT)...”,但似乎总是跳过已删除行的验证。难道我做错了什么?我正在使用 Apex 5.1.2。

为了测试,我在交互式网格上创建了​​一个验证,Type = No Rows Returned,SQL Query = SELECT 1 FROM dual WHERE :APEX$ROW_STATUS = 'D'。我希望这会阻止任何行被删除。相反,验证总是被跳过。调试日志如下所示:

Perform custom validations:
...Validation "New" - Type: NOT_EXISTS
......Skip for row 1 because "Row Status" is "Deleted"

我试过更改验证类型,将始终执行设置为是,使用范围为所有提交的行以及创建和修改的行,但没有成功。

我在这里创建了一个演示:https://apex.oracle.com/pls/apex/f?p=62159:10

最佳答案

您可以使用 APEX error handling function 获得更好的约束违规消息.这会拦截错误消息并允许您对其进行任何您想做的事情,例如查找特定的约束名称并输出更合适(和干净)的消息,如下所示: enter image description here

此外,您可以像这样用 PL/SQL 代码替换默认的网格处理:

begin  
case :APEX$ROW_STATUS
when 'C' then
insert into emp ( empno, ename, deptno )
values ( :EMPNO, :ENAME, :DEPTNO )
returning rowid into :ROWID;
when 'U' then
update emp
set ename = :ENAME,
deptno = :DEPTNO
where rowid = :ROWID;
when 'D' then
delete emp
where rowid = :ROWID;
end case;
end;

您可以调用自己的 API,而不是简单的 DML 语句,例如

     when 'D' then  
emp_pkg.delete_emp (:ROWID);

然后,这些可以在执行 DML 之前实现您自己的业务规则和错误消息。直到需要错误处理函数从异常消息中删除“ORA-20001:”等。

关于oracle - 我可以对交互式网格行删除进行验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50877904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com