考虑以下脚本:
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本身正在处理这个问题?有条件地退出整个脚本有不同的方法吗?
发布于 2018-04-17 18:39:49
在脚本中使用exit与在Firebird语句中使用exit (特别是execute block)是混淆的。脚本中的普通exit被IBExpert解释为停止脚本的信号。
但是,当exit是execute block的一部分时,它是脚本的而不是的一部分,它是发送到火鸟服务器执行的语句的一部分,它对脚本本身的执行没有影响。
execute block语句中的代码是PSQL,其中EXIT具有特定的含义:
EXIT语句导致执行过程或触发器,从代码中的任意点跳到最终的END语句,从而终止程序。
在这里,程序是过程( execute block是匿名过程)或触发器。
换句话说,exit在execute block中会导致该execute block的终止,仅此而已。
我不知道IBExpert是否支持更高级的脚本选项,但是您可以查看从execute block返回一个值,并使用脚本中的一个条件退出(如果在IBExpert中可能的话)。另一种解决方案可能是在引发异常中使用execute block (假设IBExpert在出现错误时停止脚本)。
https://stackoverflow.com/questions/49884519
复制相似问题