declare
cursor empCur is select * from emp;
emprow emp%ROWTYPE;
begin
open empCur;
fetch empCur into emprow;
while empCur%FOUND loop
DBMS_OUTPUT.put_line(emprow.empno||' '||emprow.ename);
DBMS_OUTPUT.put_line('提取了'||empCur%ROWCOUNT||'行');
fetch empCur into emprow;
end loop;
close empCur;
end;
输出结果
7369 SMITH
提取了1行
7499 ALLEN
提取了2行
7521 WARD
提取了3行
7566 JONES
提取了4行
7654 MARTIN
提取了5行
7698 BLAKE
提取了6行
7782 CLARK
提取了7行
7788 SCOTT
提取了8行
7839 KING
提取了9行
7844 TURNER
提取了10行
7876 ADAMS
提取了11行
7900 JAMES
提取了12行
7902 FORD
提取了13行
7934 MILLER
提取了14行
7934 MILLER
提取了14行
for循环
循环游标
显式游标的替代方法
它的工作原理是什么:
隐式打开游标
自动从活动集获取行
在处理完所有行时关闭游标
优点:
简化代码的编写
declare
cursor empCur is select * from emp where sal>&intputsal;--绑定变量
iCount int ;
begin
iCount := &Count;
DBMS_output.put_line(iCount);
for emprow in empCur loop
DBMS_OUTPUT.put_line(emprow.empno||' '||emprow.ename);
DBMS_OUTPUT.put_line('提取了'||empCur%ROWCOUNT||'行');
end loop;
end;
三、REF游标
在运行时使用不同的语句与之关联
REF游标使用游标变量
游标变量
一种引用类型
可以在运行时指向不同的存储位置
Close 语句关闭游标并释放用于查询的资源
游标变量的类型
具有约束的游标变量
具有返回类型的游标变量、
也称为“强游标”
无约束的游标变量
没有返回类型的游标变量
也称为“弱游标”
declare
type RefEmpcur is ref cursor return emp%ROWTYPE;
Empcur RefEmpcur;
Emprow emp%ROWTYPE;
flag int := 0;
begin
flag := &flag;
if flag=0 then
OPEN Empcur for select * from emp where sal>500 and sal<1000;
elsif flag=1 then
OPEN Empcur for select * from emp where sal>=1000;
else
OPEN Empcur for select * from emp;
end if;
loop
fetch Empcur into Emprow;
DBMS_OUTPUT.PUT_LINE(Emprow.empno);
exit when Empcur%NOTFOUND;
end loop;
close Empcur;
end;
游标变量的限制
不能在程序包中声明游标变量
远程子程序不能接受游标变量的值
不能使用比较操作符对游标变量进行相等或不相等测试
不能将空值赋予游标变量
表不能存储游标变量的值
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|