如何在火鸟中暂停工作



我有一个表t,其中一列I为int类型,有几行。我想循环遍历它。当然,我可以为此编写一个选择查询。但是我正在学习程序并写了一个程序,

set term ^;
create procedure qt returns(a int) as
begin
    for select i from t into :a do
        suspend;
end^
set term ;^

但是当我调用这个过程时,我只得到一行,

execute procedure qt;

我明白了,

           A 
============ 
           1 

我想我不理解suspend

包含SUSPEND的存储过程称为可选择过程。您可以使用SELECT:

执行它们。
SELECT * FROM qt

SELECT * FROM qt()

EXECUTE PROCEDURE语句仅用于产生单行结果的过程。如果您将它用于可选择的存储过程,那么它将只生成单行(并在到达SUSPEND时退出)。

对于您所询问的关于这方面的文件内容的答复:

  • 第177页的Interbase 6.0语言参考说:

    SUSPEND不应该在可执行过程中使用。

  • 在第178页,它显示了SUSPEND, EXITEND在可选和可执行过程中的行为表(稍作修改以适应):
Procedure type SUSPEND                EXIT                END
Selectable     • Suspends execution   Jumps to final END  • Returns control 
                 of procedure until                         to application
                 next FETCH is issued                     • Sets SQLCODE to 100 
               • Returns output                             (end of record stream)
                 values
Executable     • Jumps to final END   Jumps to final END  • Returns values
               • Not recommended                          • Returns control 
                                                            to application
  • 对于一个可以产生多行的存储过程(见第178页),第179页描述了使用SELECT和使用EXECUTE PROCEDURE执行时的行为差异。

最新更新