在 SP firebird 中执行两个 FOR SELECT 语句
Executing two FOR SELECT statement in SP 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
第一个语句执行良好,但第二个语句显示第一个语句特定列的一些数据。
这是可能的,但您需要考虑两件事:
- 一个select可用的存储过程只有一个个结果集,因此对于客户端来说,如果没有某种鉴别器列是不可能检测到的。
- 如果您不重新分配值,将为每个后续行返回最后分配的值。
第二项是您遇到的问题,要解决此问题,您需要清除 particular
的值,例如在第一项和 [=29= 之间添加行 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
但是,如果您问题中的代码是实际代码,您可能需要考虑使用视图,而不是将两个 select 与 union all
结合使用。这可能会减少开销。
是否可以在存储过程中有 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
第一个语句执行良好,但第二个语句显示第一个语句特定列的一些数据。
这是可能的,但您需要考虑两件事:
- 一个select可用的存储过程只有一个个结果集,因此对于客户端来说,如果没有某种鉴别器列是不可能检测到的。
- 如果您不重新分配值,将为每个后续行返回最后分配的值。
第二项是您遇到的问题,要解决此问题,您需要清除 particular
的值,例如在第一项和 [=29= 之间添加行 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
但是,如果您问题中的代码是实际代码,您可能需要考虑使用视图,而不是将两个 select 与 union all
结合使用。这可能会减少开销。