我有一个表t,其中一列是int类型,有几行.我想循环它.当然,我可以为此编写一个选择查询.但我正在学习程序并写了一个程序,
set term ^;
create procedure qt returns(a int) as
begin
for select i from t into :a do
suspend;
end^
set term ;^
Run Code Online (Sandbox Code Playgroud)
但是当我打电话给这个程序时,我只回到一行,
execute procedure qt;
Run Code Online (Sandbox Code Playgroud)
我知道了,
A
============
1
Run Code Online (Sandbox Code Playgroud)
我想我不明白suspend.
带有a的存储过程SUSPEND就是所谓的可选程序.你执行它们SELECT:
SELECT * FROM qt
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM qt()
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
SELECT和执行时的行为差异EXECUTE PROCEDURE.