我正在使用Firebird 2.5。我正在尝试在存储过程中处理用户定义的异常自定义消息。
我有两个程序。第一个引发了附加信息的异常(自定义异常消息)。第二个选择第一个数据,它正在尝试处理异常。
我在阅读异常的自定义消息时遇到问题。这是完整的脚本来显示和测试问题。
create exception ex_empty '';
create procedure the_first_one (iid integer)
returns (text varchar(50))
as
begin
text = '';
if (:iid <= 0) then
exception ex_empty 'ID must be positive';
else if (:iid >= 100) then
exception ex_empty 'ID is too big';
else
text = 'OK';
suspend;
end;
create procedure the_second_one
returns (text2 varchar(50))
as
begin
select the_first_one.text from the_first_one(1) into :text2;
suspend;
select the_first_one.text from the_first_one(-1) into :text2;
suspend;
select the_first_one.text from the_first_one(200) into :text2;
suspend;
when exception ex_empty do
begin
text2 = 'Bad input parameter, the '; /* here I want to add ... || :the_firs_one_exception_custom_message; */
suspend;
end
end;
当我现在开始the_second_one程序时,我可以看到结果:
OK
Bad input parameter, the
是否可以在WHEN EXCEPTION
块中处理异常的自定义消息?我想看到这个:
OK
Bad input parameter, the ID must be positive
我知道解决方案,不在the_first_one过程中引发异常,而是返回错误消息作为结果。但如果我已经在很多地方使用过该程序,我不想改变机制。
在现实世界中,the_first_one会向数据库插入一些文档,并且受到很大限制。现在我想从外部源导入许多文档,并以非异常的方式通知用户,我们遇到了一些数据问题。
答案 0 :(得分:0)
目前无法做到这一点。 PSQL上下文中不提供异常消息。
有一项改进请求要添加此功能:CORE-2382: Add possibility to get type and message of custom exception into variable。 Firebird 4已经实施,预计将于2017年发布。
您有两种选择: