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

Sql 在SP firebird中执行两个FOR SELECT语句,sql,stored-procedures,firebird,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

在存储过程中是否可能有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

第一条语句执行得很好,但第二条语句显示了第一条语句特定列的一些数据。

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

  • 一个可选择的存储过程只有一个结果集,因此对于客户端来说,如果没有某种鉴别器列,就不可能检测到这个结果集
  • 如果不重新分配值,则会为随后的每一行返回最后分配的值
  • 第二项是您遇到的问题,要解决此问题,您需要清除
    special
    的值,例如通过添加行
    special=null在第一个和选择的
    之间。
    块:

    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
    

    但是,如果你的问题中的代码是实际的代码,你可能想考虑使用一个视图,而不是用两个选择结合<代码>联合所有。这可能会减少开销