我可以以编程方式退出 Firebird 脚本吗

Posted

技术标签:

【中文标题】我可以以编程方式退出 Firebird 脚本吗【英文标题】:Can I programmatically exit a Firebird script 【发布时间】:2018-04-17 17:51:56 【问题描述】:

考虑以下脚本:

set term ^;

exit
^

execute block
as
begin
   execute statement 'this will fail';
end
^

exit 完全有效,确实会导致脚本执行结束。至少在我正在测试的 IBExpert 中。但我想以编程方式执行此操作。

set term ^;

execute block
as
begin
   if (exists(select 1 from sometable where somevalue = 1)) then begin
      -- This only exits the block, not the script
      exit;
   end
end
^

execute block
as
begin
   execute statement 'this will fail';
end
^

我的第一个示例中的 exit 是有效的 Firebird 还是 IBExpert 自己处理?是否有不同的方法可以有条件地退出整个脚本?

【问题讨论】:

【参考方案1】:

您将在脚本中使用 exit 与在 Firebird 语句中使用 exit(特别是 execute block)混淆了。 IBExpert 将脚本中的纯 exit 解释为停止脚本的信号。

但是,当 exitexecute block 的一部分时,它不是脚本的一部分,它是发送到 Firebird 服务器执行的语句的一部分,它不对脚本本身的执行有影响。

execute block 语句中的代码是 PSQL,其中EXIT 具有特定含义:

EXIT 语句使过程或触发器的执行从代码中的任意点跳转到最后的END 语句,从而终止程序。

这里,program 是过程(execute block 是匿名过程)或触发器。

换句话说,execute block 中的 exit 会导致 execute block 终止,仅此而已。

我不知道 IBExpert 是否支持更高级的脚本选项,但您可以查看从 execute block 返回的值并在脚本中使用条件退出(如果在 IBExpert 中可行的话)。另一个解决方案可能是在execute block 中的raise an exception(这假设 IBExpert 在出现错误时停止脚本)。

【讨论】:

是的,我完全明白exit 的不同之处。我仅将它放在执行块中作为示例。我希望有另一个关键字类似于 leave 如何与游标一起使用。会完全破坏脚本的东西。我想这是有道理的,因为这是 PSQL,它不应该与脚本通信。我认为可能的原因是 exit 自己工作。

以上是关于我可以以编程方式退出 Firebird 脚本吗的主要内容,如果未能解决你的问题,请参考以下文章

Google 脚本 > 如何以编程方式退出单元格?

如何以编程方式监控 docker 容器是不是退出?

如何以编程方式退出android应用程序

我可以在应用程序中使用 Wi-Fi Direct 和蜂窝数据吗?

其他应用可以退出我的应用吗?

如何以编程方式从 Android 中删除 SQLite 数据库