Pau*_*aul 6 sql firebird cursor
在此处的文档中,给出了以下代码示例cursor:
execute block
returns (
relation char(31),
sysflag int)
as
declare cur cursor for
(select rdb$relation_name, rdb$system_flag from rdb$relations);
begin
open cur;
while (1=1) do
begin
fetch cur into relation, sysflag;
if (row_count = 0) then leave;
suspend;
end
close cur;
end
Run Code Online (Sandbox Code Playgroud)
但这也可以按如下方式完成:
execute block
returns (
relation char(31),
sysflag int)
as
begin
for select rdb$relation_name, rdb$system_flag
from rdb$relations
into relation, sysflag
do begin
suspend;
end
end
Run Code Online (Sandbox Code Playgroud)
那我为什么要用一个呢?最终上面的例子甚至不需要,execlute block因为它只是一个简单的选择语句.所以我想这个例子太简单了,无法证明这一点.
您链接到的文档(及其较新的 2.5 版本)已经包含了您会(或不会)使用游标的大部分原因(重点是我的):
如果仅需要游标来遍历结果集,则使用带有子句的语句几乎总是更容易且不易出错
FOR SELECTAS CURSOR。声明的游标必须显式打开、用于获取数据并关闭。ROW_COUNT每次获取后都必须检查上下文变量,如果其值为零,则必须终止循环。语句FOR SELECT会自动检查它。尽管如此,声明的游标提供了对顺序事件的高级控制,并允许并行管理多个游标。
简而言之,您通常应该使用FOR SELECT,除非您需要同时访问多个游标,或者可能需要一些比简单循环更复杂的逻辑。它还使得可以在代码的多个部分中重用相同的游标定义(尽管这可能表明您需要将代码分解为多个存储过程)。
工具的存在并不意味着它应该用于所有事情。
顺便说一句, aFOR SELECT也是一个游标,只不过您无法明确控制它(它隐藏了大部分丑陋之处;))。
| 归档时间: |
|
| 查看次数: |
2094 次 |
| 最近记录: |