存储过程while循环问题

初学存储过程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才能判断游标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值