在SP firebird中执行两个FOR SELECT语句

时间:2016-03-06 13:00:57

标签: sql stored-procedures firebird

是否可以在存储过程中有2个FOR SELECT语句,其中第一个语句将显示其所有数据,然后第二个语句将在第一个语句完成时继续。

我已经尝试过这个:

for select id,date,particular
from TABLE_NAME
  into :id, :date, :particular
do begin
  suspend;
end

for select id,date,payor
from TABLE_NAME
  into :id, :date, :payor
do begin
   suspend;
end

第一个语句表现良好,但第二个语句显示第一个语句特定列的一些数据。

1 个答案:

答案 0 :(得分:1)

这是可能的,但您需要考虑两件事:

  1. 可选存储过程只有一个结果集,因此对于客户端,如果没有某种鉴别器列,则无法检测到此结果。
  2. 如果您不重新分配值,则会为每个后续行返回最后指定的值。
  3. 第二项是您遇到的问题,要解决此问题,您需要清除particular的值,例如在第一项和particular = null;之间添加第for select ..行块:

    for select id,date,particular
    from TABLE_NAME
      into :id, :date, :particular
    do begin
      suspend;
    end
    
    particular = null;
    
    for select id,date,payor
    from TABLE_NAME
      into :id, :date, :payor
    do begin
       suspend;
    end
    

    但是,如果您问题中的代码是实际代码,则可能需要考虑使用视图,而使用两个选项并结合union all。这可能会减少开销。