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

Oracle 我可以对交互式网格行删除进行验证吗?,oracle,oracle-apex,Oracle,Oracle Apex,我试图在交互式网格上添加一个验证,基本上是检查是否有任何内容依赖于行,这样我就可以显示一个用户友好的错误,而不是“Ajax调用返回的服务器错误ORA-20987:APEX-ORA-02292:integrity constraint(FOO.MY_constraint)…”,但对于删除的行,验证似乎总是被跳过。我做错什么了吗?我使用的是Apex 5.1.2 为了测试,我在交互式网格上创建了一个验证,Type=No Rows Returned,SQL Query=select1 FROM dual

我试图在交互式网格上添加一个验证,基本上是检查是否有任何内容依赖于行,这样我就可以显示一个用户友好的错误,而不是“Ajax调用返回的服务器错误ORA-20987:APEX-ORA-02292:integrity constraint(FOO.MY_constraint)…”,但对于删除的行,验证似乎总是被跳过。我做错什么了吗?我使用的是Apex 5.1.2

为了测试,我在交互式网格上创建了一个验证,Type=No Rows Returned,SQL Query=select1 FROM dual,其中:APEX$ROW\u STATUS='D'。我希望这可以防止删除任何行。相反,始终跳过验证。调试日志如下所示:

Perform custom validations:
...Validation "New" - Type: NOT_EXISTS
......Skip for row 1 because "Row Status" is "Deleted"
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;  
我尝试过更改验证的类型,将Always Execute设置为Yes,使用的范围是所有提交的行、创建的行和修改的行,但运气不佳


我在这里创建了一个演示:

您可以使用。这将截获错误消息,并允许您对其执行任何操作,例如查找特定的约束名称,并输出更合适(且更清晰)的消息,如:

此外,您可以用PL/SQL代码替换默认的网格处理,如下所示:

Perform custom validations:
...Validation "New" - Type: NOT_EXISTS
......Skip for row 1 because "Row Status" is "Deleted"
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:”等。Patrick Wolf已确认这是一个错误,将予以修复

如果可以避免的话,我宁愿不编写自己的自定义处理。这个页面非常简单,标准的IG处理可以处理它。这两种解决方案都在处理步骤中起作用。在验证步骤中没有办法捕捉到这一点吗?