我有一个表t,其中一列是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
。
答案 0 :(得分:8)
其中包含SUSPEND
的存储过程称为可选程序。您可以使用SELECT
执行它们:
SELECT * FROM qt
或
SELECT * FROM qt()
EXECUTE PROCEDURE
语句仅适用于生成单行结果的过程。如果您将它用于可选择的存储过程,那么它只会产生一行(当它到达SUSPEND
时退出)。
回应您对此记录内容的询问:
不应在可执行程序中使用SUSPEND。
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
SELECT
执行并使用EXECUTE PROCEDURE
执行时的行为差异。