暂停在火鸟中如何工作?
How does suspend work in firebird?
我有一个 table t 有一个类型为 int 的列 i,有几行。
我想遍历它。当然,我可以为此编写一个 select 查询。但是我正在学习程序,写了一个程序,
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
in them are so called selectable procedures. You execute them using SELECT
的存储过程:
SELECT * FROM qt
或
SELECT * FROM qt()
EXECUTE PROCEDURE
语句仅适用于产生单行结果的过程。如果您将它用于 selectable 存储过程,那么它只会生成一行(并在它命中 SUSPEND
时退出)。
针对您关于此文件记录内容的询问:
- Interbase 6.0 语言参考第 177 页说:
SUSPEND should not be used in an executable procedure.
- 在第 178 页上,它显示了
SUSPEND
、EXIT
和 END
在 selectable 和 execu[=43= 中的行为的 table ] 程序(略作修改以适应):
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
执行时的行为差异。
我有一个 table t 有一个类型为 int 的列 i,有几行。 我想遍历它。当然,我可以为此编写一个 select 查询。但是我正在学习程序,写了一个程序,
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
in them are so called selectable procedures. You execute them using SELECT
的存储过程:
SELECT * FROM qt
或
SELECT * FROM qt()
EXECUTE PROCEDURE
语句仅适用于产生单行结果的过程。如果您将它用于 selectable 存储过程,那么它只会生成一行(并在它命中 SUSPEND
时退出)。
针对您关于此文件记录内容的询问:
- Interbase 6.0 语言参考第 177 页说:
SUSPEND should not be used in an executable procedure.
- 在第 178 页上,它显示了
SUSPEND
、EXIT
和END
在 selectable 和 execu[=43= 中的行为的 table ] 程序(略作修改以适应):
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
执行时的行为差异。