You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL游标代码为何重复输出两次?请求排查原因

问题原因分析

你的代码逻辑顺序错误,导致重复输出。具体执行流程如下:

  1. 第一次进入循环:从dual表中成功获取到唯一一行数据hello并存入word变量,执行dbms_output.put_line(word)输出hello;随后检查c%notfound,此时游标未到末尾,条件不成立,继续循环。
  2. 第二次进入循环:再次执行fetch,此时游标已无数据可获取,c%notfound变为true,但你先执行了put_line(word)(输出的仍是上一次保存的hello),之后才触发exit退出循环。

修正后的代码

调整判断与输出的顺序,确保仅在成功获取数据后才输出:

DECLARE
cursor c is
Select 'hello' from dual;

word varchar2(100);

BEGIN

open c;
   loop
   fetch c into word;
   exit when c%notfound; -- 先判断是否获取失败,失败直接退出
   dbms_output.put_line(word); -- 成功获取才输出
   end loop;

END;

更推荐使用简洁的游标FOR循环(无需手动管理游标开闭与判断):

DECLARE
cursor c is
Select 'hello' from dual;
BEGIN
   for rec in c loop
      dbms_output.put_line(rec.column_value);
   end loop;
END;

内容的提问来源于stack exchange,提问作者moon light

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:53:11