declare
v_empid more_employees.employee_id%TYPE;
v_name more_employees.first_name%TYPE;
CURSOR EMPCUR IS SELECT employee_id,first_name from more_employees; -------------定义游标
BEGIN
OPEN EMPCUR; -------------开启游标
LOOP
FETCH EMPCUR INTO v_empid,v_name; --------------取
EXIT WHEN EMPCUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_empid||' '||v_name);
end loop;
CLOSE EMPCUR; -------------关闭
end;
一、游标的相关概念及特性
1.定义
映射在结果集中某一行数据的具体位置,类似于C语言中的指针。即通过游标方式定位到结果集中某个特定的行,然后根据业务需求
对该行进行相应特定的操作。
2.游标的分类
显示游标:即用户自定义游标,专门用于处理select语句返回的多行数据
隐式游标:系统自动定义的游标,记录集只有单行数据,用于处理select into 和DML语句
3.游标使用的一般过程:
显示游标:声明, 打开, 读取, 关闭
隐式游标:直接使用读取,声明、打开、关闭都是系统自动进行的
4.显示游标的过程描述
a.声明游标
CURSOR cursor_name IS select_statement
如:CURSOR emp_cur IS SELECT empno,ename,job,sal FROM scott.emp;
b.打开游标
OPEN cursor_name --打开游标则执行对应的select语句,将对应的结果集存放到游标当中
如:OPEN emp_cur
c.读取数据
FETCH cursor_name INTO var_name1,...var_name2 ; --提取单行数据,需要配合循环语句来使用
FETCH cursor_name BULK COLLECT INTO collect1,collect2,...[LIMIT rows]; --提取多行数据,collect为集合变量
d.关闭游标
CLOSE cursor_name
5.显示游标的个属性
cursor_name%ISOPEN 游标是否打开
cursor_name%FOUND 最近的FETCH是否提取到数据
cursor_name%NOTFOUND 最近的FETCH是否没有提取到数据
cursor_name%ROWCOUNT 返回到目前为止,已经从游标缓冲区中提取到数据的行数
六、游标变量
简言之,其一是一个游标,其次则是一个变量,因此称之为游标变量,可以用来存储不同的游标
对于游标变量的使用,在打开游标变量时指定其对应的select语句
1.游标变量的使用步骤
a.定义REF CURSOR 类型和游标变量
TYPE ref_type_name IS REF CURSOR [RETURN return_type]; --必须先定义REF CURSOR类型
cursor_variable ref_type_name; --接下来再定义游标变量
ref_type_name: --指定自定义的类型名
RETURN: --指定REF CURSOR返回结果的数据类型
cursor_variable : 定义游标变量的名字
若指定RETURN子句,其数据类型必须是记录类型,此外,不能在包内定义游标变量
b.打开游标
在打开游标时必须指定其对应的select语句,一旦打开游标变量则对应的select结果集将存放到游标变量中
OPEN cursor_variable FOR select_statement;
c.提取数据
提取数据与普通的显示游标提取数据的方法类似
FETCH cursor_variable INTO variable1,...variable2 ; --提取单行数据,需要配合循环语句来使用
FETCH cursor_variable BULK COLLECT INTO collect1,collect2,...[LIMIT rows]; --提取多行数据,collect为集合变量
d.关闭游标变量
CLOSE cursor_vairable;
2.游标变量使用的例子
--例.根据部门名称显示该部门的所有雇员(定义REF CURSOR时不指定RETURN子句)
scott@ORCL> get /u01/bk/scripts/emp_cur12.sql
1 DECLARE
2 type emp_cur_type is ref cursor; --定义游标类型为ref cursor
3 emp_cur emp_cur_type; --定义游标变量为emp_cur
4 emp_record emp%rowtype; --定义游标变量记录类型为emp_record
5 v_deptno emp.deptno%type;
6 BEGIN
7 v_deptno:=&inputno;
8 open emp_cur for select * from emp where deptno=v_deptno;
9 dbms_output.put_line('No Name');
10 loop
11 fetch emp_cur into emp_record;
12 exit when emp_cur%notfound;
13 dbms_output.put_line(emp_cur%rowcount||' '||emp_record.ename);
14 end loop;
15 close emp_cur;
16* END;
17 /
Enter value for inputno: 10
old 7: v_deptno:=&inputno;
new 7: v_deptno:=10;
No Name
1 CLARK
2 KING
3 MILLER
相关推荐
oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结
Oracle游标的一般使用
oracle游标使用大全,详细描述了如何使用游标,创建游标等等
ORACLE 游标使用示例,给大家可以共享一下。
Oracle游标使用方法及语法大全.doc
详细的oracle游标用法,简单易懂,是学习游标的好材料
oracle 游标FOR循环
Oracle游标使用方法及语法大全
oracle游标 详解 精析 示例 真正能把游标讲透、说全、调理清晰的讲义。 游标犹如C语言的指针:灵活、实用、高效。 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。 游标是一个通过定义...
oracle游标优化以及oracle游标的作用和游标的概念。
oracle游标使用大全,其中有很多例子,有助于大家理解,希望对初学者有帮助
详细介绍了 oracle的游标使用 及 实例
Oracle 游标! 值得下载看看!资源免费,大家分享!!
关于游标使用问题的练习附答案。游标分隐式和显示游标;动态和ref游标。。。
游标是存储过程最基本的要会的,用于访问 ORACLE 数据库的 DDL 和 TCL 语
主要描述oracle中游标的学习隐式游标和显示游标
该资源系本人培训期间的关于ORCL 游标所有实用案例,在此共享希望对大家学习有所帮助
我自己编写的oracle游标案例,希望对大家有点帮助!