如何丢弃/忽略存储过程的多个返回值之一

时间:2018-05-10 08:56:12

标签: sql stored-procedures firebird

我有一个返回2个值的存储过程。

在另一个程序中,我称之为(编辑 NOT 可选)程序,但只需要两个返回值中的一个。

有没有办法丢弃其他价值?我想知道什么是好的做法,并希望获得小的性能提升。

以下是我如何无错误地调用该程序:

CREATE or ALTER procedure my_proc1
as
declare variable v_out1 integer default null;
declare variable v_out2 varchar(10) default null;
begin
    execute procedure my_proc2('my_param')
    returning_values :v_out1, :v_out2;
end;

这是我发现在没有得到-607错误的情况下调用此过程的唯一方法“超出了不成功的元数据更新请求深度。 (递归定义?)'只要我只使用一个变量v_out1。

所以我的实际问题是 :我可以避免创建一个v_out2变量,因为我永远不会使用它(该值仅用于其他程序也调用my_proc2)?

编辑:存储过程my_proc2实际上是不可选的。但毕竟我让它可以选择。

1 个答案:

答案 0 :(得分:2)

由于您的存储过程是可选的,因此您应该通过SELECT语句调用它,即

select out1, out2 from my_proc2('my_param')

在这种情况下,你确实可以省略一些返回值。但是,由于计算省略字段的SP内部逻辑仍然执行,我不会指望性能明显增加。

如果你的程序不可选,那么创建一个包装SP是唯一的方法,但同样,它不会给任何性能提升,因为在原始SP中执行艰苦工作的代码仍然执行。