二十三、游标
游标(cursor)可以被看作是指向结果集(a set of rows)中一行的指针(pointer)。在oracle数据库中可以使用显示或隐式两种游标。
23.1 隐式游标
在执行一个sql语句时,oracle服务器将自动创建一个隐式游标,这个游标是内存中处理该语句的工作区域,其中存储了执行SQL语句的结果.通过游标的属性可获得sql语句执行的结果以及游标状态信息。
游标的主要属性如下:
%found 布尔属性 如果sql语句至少影响一行 则为true 否则为false
%notfound 布尔属性 与%found相反。
%isopen 布尔属性 游标是否打开 打开为true 否则为false
%rowcount 数字属性 返回受sql语句影响的行数
怎么来使用这些属性呢?很简单,我们可以通过 “sql属性名 “
来使用。
//%rowcount 用来检查受影响的行
SQL> declare
2 emp_row emp%rowtype;
3 begin
4 select * into emp_row from emp where empno=7369;
5 dbms_output.put_line(sql%rowcount);
6 end;
7 /
1 //返回的结果为1
//%found用来检查是否影响到了行
SQL> begin
2 update emp set sal=2000 where empno=7369;
3 if sql%found then
4 dbms_output.put_line('更新记录成功 影响了'||sql%rowcount||'行');
5 else
6 dbms_output.put_line('未更新记录');
7 end if;
8 end;
9 /
更新记录成功 影响了1行
// %notfound
//%isopen
一以上两个的使用方式参考 %found进行理解。
另外一种隐式游标cursor for loop可用于处理sql语句的结果集
SQL> begin
2
3 for rec in (select * from emp) loop
4 dbms_output.put_line(rec.empno||'/'||rec.ename||'/'||rec.job||'/'||rec.mgr||'/'||rec.hiredate||'/'||rec.sal||'/'||rec.comm||'/'||rec.deptno);
5 end loop;
6 end;
7 /
23.2 显示游标
显式游标是在PL/SQL程序中使用包含select语句来声明的游标。如果需要处理从数据库中检索的一组记录,则可以使用显示游标.使用显示游标处理数据需要四个步骤:声明游标,打开游标,检索数据,关闭游标。
23.2.1 声明游标
声明游标就是通过定义游标的名称,游标的特性来声明游标,以及打开游标后就可调用查询语句,声明的语法如下:
Cursor cursor_name[parameter[,parameter]….]
[return return_type] is select_statement;
Parameter作为游标的输入参数,它可以让用户在打开游标式,向游标传递值。语法如下:
Parameter_name [in] datatype[{:=|default} expression]\
举例:
declare
cursor emp_cursor (pno in number(4) default 7369)
is select * from emp
where empno=pno;
23.2.2 打开游标
就是指执行声明游标时指定的查询语句。打开的方式只需使用open打开:
Open cursor_name(参数);
如果没有指定参数就采用默认值执行select语句
23.2.3 检索数据
检索数据就是从检索到的结果集中获取数据保存到变量中,以便变量进行处理。
使用fetch语句找出结果集中的单行,并从中提取单个值传递给主变量。
语法如下:
Fetch cursor_name into [variable_list[record_variable]]
变量用于存储检索的数据
23.2.4 关闭游标
Close 游标名称
23.2.5 综上所述综合案例
SQL> declare
2 cursor emp_cursor (pno in number default 7369) //声明游标
3 is select * from emp where empno=pno;
4
5 emp_row emp%rowtype; //声明变量
6 begin
7 open emp_cursor(7934); //打开游标
8 fetch emp_cursor into emp_row; //检索数据 结果为一行
9 dbms_output.put_line(emp_row.ename); //输出检索结果
10
11 close emp_cursor; //关闭游标
12 end;
13 /
23.2.6 游标for循环
依次读取结果集中的行,当for循环开始时,游标会自动打开(不需要使用open方法开启),每循环读取一次,系统自动读取当前数据(不需要使用fetch),当退出for循环时,游标也会自动关闭(不需要使用close方法)。
SQL> declare
2 cursor emp_cursor (pno in number default 7369) //声明游标
3 is select * from emp where empno=pno;
4
5 begin
6 for emp_row in emp_cursor(7934) loop //for循环开始时 自动打开游标 并且自动获取数据 自动关闭
7 dbms_output.put_line(emp_row.ename);
8 end loop;
9 end;
10 /
分享到:
相关推荐
Oracle数据库系统应用与开发 pdf 格式 数据库基础
oracle 数据库管理与应用系统开发代码/oracle 数据库管理与应用系统开发代码
资源名称:Oracle数据库开发与应用内容简介:《Oracle数据库开发与应用》分为5部分共25章,涵盖了数据库入门、数据查询、数据修改和维护、数据库编程、数据库管理。《Oracle数据库开发与应用》使用的开发环境是...
這是一篇介紹oracle数据库系统应用与开发的基礎文章,特別適合初學者使用
oracle 数据库的应用开发 oracle 数据库的应用开发
由浅入深地介绍了Oracle 10g系统的使用方法和基本管理。...本书全面介绍使用Oracle数据库管理应用与开发知识,适合作为普通高校计算机专业Oracle教材,也可以作为Oracle数据库开发和应用人员的参考资料。
oracle数据库应用与开发
Oracle 11g中文版数据库管理、应用与开发标准教程
Oracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.pptOracle数据库的应用开发.ppt
体验数据库的应用→认识 Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储过程与触发器 →管理安全性→数据库...
Oracle 数据库管理与应用系统开发: Oracle编程 创建存储过程 创建自定义类型 使用存储过程和函数 创建存储过程 创建函数 使用触发器和作业 创建触发器 创建序列等 跟踪和调试 创建存储过程 创建...
Oracle10g数据库管理与应用系统开发光盘
Oracle数据库的开发与应用培训
学生成绩管理演示系统是一个用 ASP 实现的简单的网上学生成绩 管理系统。使用 ADO 对象来访问后台数据库,包含学生信息的查询界面,学生 信息的录入、修改、删除界面,学生成绩的录入修改界面。
Oracle数据库系统应用开发课程设计说明书,内含完整DFD图、视图设计、过程函数触发器设计以及主要操纵语句。
Oracle数据库应用开发及实践.rar