我可以以编程方式退出 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
解释为停止脚本的信号。
但是,当 exit
是 execute 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 脚本吗的主要内容,如果未能解决你的问题,请参考以下文章