Firebird - 处理异常的自定义消息

时间:2015-10-23 11:06:09

标签: database exception-handling firebird

我正在使用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会向数据库插入一些文档,并且受到很大限制。现在我想从外部源导入许多文档,并以非异常的方式通知用户,我们遇到了一些数据问题。

1 个答案:

答案 0 :(得分:0)

目前无法做到这一点。 PSQL上下文中不提供异常消息。

有一项改进请求要添加此功能:CORE-2382: Add possibility to get type and message of custom exception into variable。 Firebird 4已经实施,预计将于2017年发布。

您有两种选择:

  1. 正如您已经说过的那样,要将异常消息作为返回参数传递,
  2. 处理调用存储过程的客户端中的错误。