想知道为什么下面的代码会输出“hello”两次? (当只有1条输出线时) 谢谢。
DECLARE
cursor c is
Select 'hello' from dual;
word varchar2(100);
BEGIN
open c;
loop
fetch c into word;
dbms_output.put_line(word);
exit when c%notfound;
end loop;
END;
将“EXIT”放在 FETCH 之后。该循环将进行 2 次迭代。第一个获取记录,第二个没有找到记录,但仍然具有第一次迭代的值并打印该值,然后退出。您的代码执行以下操作:
DECLARE
l_loopcounter NUMBER := 1;
CURSOR c IS
SELECT 'hello'
FROM dual;
word VARCHAR2(100);
BEGIN
OPEN c;
LOOP
FETCH c INTO word;
dbms_output.put_line(l_loopcounter || '-' || word);
l_loopcounter := l_loopcounter + 1;
EXIT WHEN c%notfound;
END LOOP;
END;
/
1-hello
2-hello
PL/SQL procedure successfully completed.
将 EXIT 语句移至 FETCH 语句之后:
DECLARE
l_loopcounter NUMBER := 1;
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(l_loopcounter || '-' || word);
l_loopcounter := l_loopcounter + 1;
END LOOP;
END;
/
1-hello
PL/SQL procedure successfully completed.