我有一个表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
,EXIT
和END
在可选和可执行过程中的行为表(稍作修改以适应):
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
执行时的行为差异。