本节内容:
oracle游标的使用方法。
所谓游标,是指向一个结果集的指针。
来看有关oracle游标的介绍与实例。
1, 例子
(1) 取第一条
复制代码 代码示例:
declare
-- 声明游标
cursor c is
select * from emp;
v_emp c%rowtype;
begin
-- 打开游标后, 才会执行select语句, 把结果集放入内存
open c;
-- 将当前游标指向的记录内容抓取出来, 放入v_emp中, 并移向下一条记录
fetch c into v_emp;
dbms_output.put_line(v_emp.ename);
-- 关闭游标, 清除内存中的数据
close c;
end;
(2) 循环取-1 ->loop
复制代码 代码示例:
declare
cursor c is
select * from emp;
v_emp c%rowtype;
begin
open c;
loop
fetch c into v_emp;
exit when (c%notfound);
dbms_output.put_line(v_emp.ename);
end loop;
close c;
end;
(3) 循环取-2 ->while
复制代码 代码示例:
declare
cursor c is
select * from emp;
v_emp emp%rowtype;
begin
open c; ---www.jb200.com
fetch c into v_emp;
while (c%found) loop
dbms_output.put_line(v_emp.ename);
fetch c into v_emp;
end loop;
close c;
end;
(4) 循环取-3 ->for --(推荐使用)
复制代码 代码示例:
declare
cursor c is
select * from emp;
begin
for v_emp in c loop
dbms_output.put_line(v_emp.ename);
end loop;
end;
2, 游标的四个属性
参考: http://wenku.baidu.com/view/0ed038d5240c844769eaeeb9.html
(1) %isopen
测试游标是否打开,没打开的情况下使用fetch语句将提示错误
(2) %found
测试前一个fetch语句是否有值,有值将返回true ,不然false
(3) %notfound
该属性是%found属性的反逻辑,常被用于退出循环
(4) %rowcount
该属性用于返回游标的数据行数
3, 带参数的游标
复制代码 代码示例:
declare
-- 带两个形参的游标
cursor c(v_deptno emp.deptno%type, v_job emp.job%type)
is
select ename, sal from emp
where deptno = v_deptno and job = v_job;
begin ---www.jb200.com
-- 打开游标后, 给形参赋值
for v_temp in c(30, 'CLERK') loop
dbms_output.put_line(v_temp.ename);
end loop;
end;
4, 可更新的游标 --> where current of 游标
复制代码 代码示例:
declare
cursor c
is
select * from emp2 for update;
begin
for v_temp in c loop
if (v_temp.sal < 2000) then
update emp2 set sal = sal * 2 where current of c;
elsif (v_temp.sal = 5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;