转自
"
如何遍历所有记录,不用每次输入特定的值去查询。那么我们使用Oracle游标
游标分为:静态游标和引用游标(动态游标)静态游标:由用户定义(隐式游标、显示游标)结果集不变引用游标游标:结果集变化隐式游标:用DML操作时,自动使用隐式游标。我们可以使用隐式游标判断SQL语句执行结果自动声明和处理的。在Session会话区,开启游标。处理后自动关闭。可以返回单行查询。隐式游标使用:declare %NOTFOUND -- 执行行没有找到。%FOUND --执行行找到%ROWCOUNT --游标影响行数%ISOPEN -- 当前游标是否打开我们现在通过游标来看看上篇文章的例子通过循环来遍历数据:1、loop when循环 declare cursor myCur is select * from hr.jobs;oneRow hr.jobs % rowtype; begin open myCur; loop fetch myCur into oneRow; dbms_output.put_line(oneRow.job_id || ' ' || onerow.job_title); exit when myCur % notFound; end loop; close myCur; end ;
declare cursor myCur is select * from hr.jobs;oneRow hr.jobs % rowtype; begin open myCur; fetch myCur into oneRow; while (myCur % found) loop dbms_output.put_line(oneRow.job_id || ' ' || onerow.job_title); fetch myCur into oneRow; end loop; close myCur; end ;
declare cursor myCur is select * from hr.jobs;oneRow hr.jobs % rowtype; begin for oneRow in myCur loop dbms_output.put_line(oneRow.job_id || ' ' || onerow.job_title); end loop; end ;
"
如果第一种不用“exit when”, 单单用"exit", 那就在loop里放一个 if 语句把 exit 放在里面.