在 APEX 20.1 中删除之前检查参照完整性
Checking Referential Integrity prior to Delete in APEX 20.1
当用户尝试删除 code/validation 记录时,我想检查该记录中的代码在删除尝试之前是否已被使用,以便我可以显示更有意义的消息比 Oracle 约束错误。
例如:“无法删除此代码,因为它已在课程记录中引用。请将其停用。”
任何人都可以给我一般关于采取的方法的建议吗?
我的第一个想法是创建一个与“删除”按钮关联的动态操作。不过,我认为可能有更好的方法。
您已经说过 - 创建一个 验证,它们就是为此目的而设计的。使其成为 返回错误文本的函数主体 。编写您的代码并显示一条消息。像
declare
l_var number;
begin
select d.blabla
into l_var
from detail_table d
where ...;
if l_var is not null then
return ('This code can not be deleted etc.');
end if;
end;
我更喜欢捕获错误的概念如果它们是使用应用程序错误处理程序发生的
https://docs.oracle.com/en/database/oracle/application-express/20.2/htmdb/editing-application-attributes.html#GUID-B744BE26-69B6-4084-A217-114CF05A5A4B
sample 提供了有关如何将任何已知约束转换为更用户友好的消息的详细信息。
按照您的建议创建 DA 的危险在于检查和显示与实际删除尝试之间可能存在时间差异,无论多么小。
当用户尝试删除 code/validation 记录时,我想检查该记录中的代码在删除尝试之前是否已被使用,以便我可以显示更有意义的消息比 Oracle 约束错误。
例如:“无法删除此代码,因为它已在课程记录中引用。请将其停用。”
任何人都可以给我一般关于采取的方法的建议吗?
我的第一个想法是创建一个与“删除”按钮关联的动态操作。不过,我认为可能有更好的方法。
您已经说过 - 创建一个 验证,它们就是为此目的而设计的。使其成为 返回错误文本的函数主体 。编写您的代码并显示一条消息。像
declare
l_var number;
begin
select d.blabla
into l_var
from detail_table d
where ...;
if l_var is not null then
return ('This code can not be deleted etc.');
end if;
end;
我更喜欢捕获错误的概念如果它们是使用应用程序错误处理程序发生的 https://docs.oracle.com/en/database/oracle/application-express/20.2/htmdb/editing-application-attributes.html#GUID-B744BE26-69B6-4084-A217-114CF05A5A4B
sample 提供了有关如何将任何已知约束转换为更用户友好的消息的详细信息。
按照您的建议创建 DA 的危险在于检查和显示与实际删除尝试之间可能存在时间差异,无论多么小。