是否可以在存储过程中有 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
第一个语句执行良好,但第二个语句显示第一个语句的特定列的一些数据。
这是可能的,但您需要考虑两件事:
- 可选存储过程只有一个结果集,因此对于客户端,如果没有某种鉴别器列,就无法检测到这一点。
- 如果不重新分配值,则会为后续的每一行返回最后一个分配的值。
第二项是您遇到的问题,要解决此问题,您需要清除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
结合使用。这可能会减少开销。