在 SP 火鸟中执行两个 FOR SELECT 语句



是否可以在存储过程中有 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. 可选存储过程只有一个结果集,因此对于客户端,如果没有某种鉴别器列,就无法检测到这一点。
  2. 如果不重新分配值,则会为后续的每一行返回最后一个分配的值。

第二项是您遇到的问题,要解决此问题,您需要清除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 结合使用。这可能会减少开销。

最新更新