初学存储过程while 条件 loop循环老是进不去,代码如下
declare
cursor vrows is select ename from emp;
vrow emp.ename%type;
begin
dbms_output.put_line('1:');
open vrows;
while vrows%FOUND loop
dbms_output.put_line('2:');
fetch vrows into vrow;
dbms_output.put_line('3:'||vrow);
end loop;
dbms_output.put_line('4:');
close vrows;
end;
修改了%found与%notfound,结果还是只输出了1和4,压根没进入while循环体中,在循环体外加了一句fetch vrows into vrow;
declare
cursor vrows is select ename from emp;
vrow emp.ename%type;
begin
dbms_output.put_line('1:');
open vrows;
fetch vrows into vrow;
while vrows%FOUND loop
dbms_output.put_line('2:');
fetch vrows into vrow;
dbms_output.put_line('3:'||vrow);
end loop;
dbms_output.put_line('4:');
close vrows;
end;
结果能输出了,但缺少了第一个元素,修改代码位置
declare
cursor vrows is select ename from emp;
vrow emp.ename%type;
begin
dbms_output.put_line('1:');
open vrows;
fetch vrows into vrow;
while vrows%FOUND loop
dbms_output.put_line('2:');
dbms_output.put_line('3:'||vrow);
fetch vrows into vrow;
end loop;
dbms_output.put_line('4:');
close vrows;
end;
全部元素都能输出,while循环和loop end loop循环,区别大概在while要先判断条件,再执行循环体,而loop可以先执行一遍循环体,再根据里面的exit语句退出,此外需要先fetch才能判断游标。