Oracle 中游标的使用
游标(cursor)可以被看作指向结果集(a set of rows)中一行的指针(pointer)。在oracle数据库中可以使用显示或隐式两种游标。
隐式游标:
在执行一个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 /
显示游标
是在PL/SQL程序中使用包含select语句来声明的游标。如果需要处理从数据库中检索的一组记录,则可以使用显示游标.使用显示游标处理数据需要四个步骤:声明游标,打开游标,检索数据,关闭游标。
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;
2、 打开游标
就是指执行声明游标时指定的查询语句。打开的方式只需使用open打开语法:
Open cursor_name(参数);
如果没有指定参数就采用默认值执行select语句
3、 检索数据
检索数据就是从检索到的结果集中获取数据保存到变量中,以便变量进行处理。
使用fetch语句找出结果集中的单行,并从中提取单个值传递给主变量。
语法如下:
Fetch cursor_name into [variable_list[record_variable]]
变量用于存储检索的数据
4、 关闭游标
关闭游标使得用户不能再从查询结果中检索数据。使用完游标后应该关闭游标释放select 语句的查询结果。语法:
Close 游标名称
综上所述综合案例如下:
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 /
游标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 /
游标变量
游标变量也可以处理多行查询结果集。
游标变量的定义包括两个步骤:
1、 定义cursor类型的指针
语法:
Type ref_cursor_name is ref cursor[return return_type]
举例:
Type var_cursor_name is ref cursor;
2、 定义ref cursor类型的变量
v_rc var_cursor_name;
综合写法如下:
Type var_cursor_name is ref cursor;
v_rc var_cursor_name;
上面的综合声明的游标变量 称为弱的ref cursor类型,因为它没有指明游标返回的结果,因此它可以指向任何一个具有多列的select查询结果.
相对于上面还有一种称为:强ref cursor类型.
声明方式如下:
Type varcursorName is ref cursor return emp%rowtype; //指明了返回的结果
Vcn varcursorName; //声明一个强的ref cursor类型的变量
使用游标变量与游标使用方式一样,也需要声明,打开,检索,关闭游标变量。
综合案例如下:
SQL> declare
2
3 type emp_cname is ref cursor return emp%rowtype; //声明游标变量第一步
4
5 ecname emp_cname; //声明游标变量第二步
6
7 emp_row emp%rowtype; //声明用于保存检索数据的变量
8
9 begin
10 dbms_output.put_line('开始');
11 open ecname for select * from emp where empno=7934; //打开游标变量
12 loop
13 fetch ecname into emp_row; //查询结果赋值给保存的变量
14 exit when ecname%notfound; //退出条件
15 dbms_output.put_line(emp_row.ename); //输出结果
16 end loop; //退出循环
17 close ecname; //关闭游标变量
18 dbms_output.put_line('结束');
19 end;
20 /
开始
MILLER
结束
//复杂的案例
SQL> declare
2
3 type emp_cname is ref cursor return emp%rowtype;
4
5 ecname emp_cname;
6
7 emp_row emp%rowtype;
8
9 begin
10 dbms_output.put_line('开始');
11 open ecname for select * from emp;
12 loop
13 fetch ecname into emp_row;
14 exit when ecname%notfound;
15 dbms_output.put_line(emp_row.ename);
16 end loop;
17 close ecname;
18 dbms_output.put_line('结束');
19 end;
20 /
开始
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
text-ali
分享到:
相关推荐
Oracle 中游标的使用 Oracle 中的游标(Cursor)是一种重要的数据库对象,它允许开发者在 SQL 语句中处理大量数据。游标的使用可以将复杂的数据处理过程简化,使得开发效率和代码可读性提高。下面将对 Oracle 中游...
在Oracle数据库中,游标(Cursor)是一种非常重要的编程工具,...以上内容详细介绍了Oracle中游标的使用方法,包括基本概念、类型和在PL/SQL中的操作。通过学习和实践,你可以熟练掌握游标,提升在数据库编程中的效率。
Oracle中的游标是PL/SQL编程中的核心概念,主要用于处理多行查询结果。游标允许程序逐行处理数据库查询返回的数据,而不是一次性加载所有记录。根据声明方式不同,Oracle的游标可以分为隐式游标和显式游标。 隐式...
### Oracle中游标的应用详解 #### 一、游标概念及分类 游标在Oracle数据库中扮演着重要的角色,尤其在处理多行数据时显得尤为关键。游标本质上是SQL的一个内存工作区,用于存储从数据库中提取的数据块。为了提高...
oracle中游标的使用方法,便于初学者参考,精通人员欢迎指正在。
【Oracle9i中游标的应用】 Oracle数据库是关系型数据库管理系统的一个典型代表,它提供了丰富的功能,其中游标是数据库编程的重要组成部分。游标允许开发者逐行处理查询结果集,对于交互式应用程序的设计尤其关键。...
本文将详细介绍Oracle中游标的使用方法,包括游标的定义、类型以及如何在实际编程中应用这些概念。 #### 二、游标的定义与作用 游标是SQL的一个内存工作区,它可以由系统或用户定义。它主要用于临时存储从数据库中...
本文详细介绍了Oracle中游标的使用方法,包括隐式游标和显式游标的定义、属性以及具体的操作步骤。通过这些知识点的学习,可以更好地理解和掌握如何在Oracle数据库中高效地处理数据。 通过本文的学习,你应该能够...
本文详细介绍了Oracle中游标的使用方法,包括基本语法、简化使用方式以及如何利用游标进行数据更新和删除等高级操作。通过这些知识点的学习,读者可以更好地掌握如何在实际开发中运用游标来提高数据处理效率和灵活性...
以上就是Oracle中游标的基本用法。通过游标,开发者能够灵活地遍历查询结果,进行复杂的逻辑处理,从而实现更精细的数据操作。在实际开发中,熟练掌握游标的使用是提高代码效率和可维护性的重要手段。
本文将详细介绍Oracle中游标的使用方法、分类及其在存储过程中的应用。 #### 二、基本概念 **1. SELECT INTO 语句** - 在PL/SQL中,`SELECT INTO` 语句通常用来查询单行数据,并将查询结果直接赋值给指定的变量。...
本文将通过几个示例详细介绍Oracle中游标的使用方法。 #### 明确声明的游标 (Explicit Cursor) 在Oracle PL/SQL块中,可以通过`CURSOR`关键字明确声明一个游标。声明游标时,需要指定查询语句,该查询语句定义了...
17.4 oracle中游标的使用 365 17.4.1 显式游标与隐式游标 365 17.4.2 游标的属性 366 17.4.3 %type、%rowtype定义记录变量 367 17.4.4 参数化游标 368 17.4.5 游标中的循环 369 17.4.6 游标变量 371 17.5 小...
6.4.4 使用TOP子句 6.4.5 NULL的判断 6.5 模糊查询 6.5.1 使用LIKE运算符进行查询 6.5.2 使用“_”通配符进行查询 6.5.3 使用“%”通配符进行查询 6.5.4 使用“[]”通配符进行查询 6.5.5 使用“[^]”通配符进行查询...
在 SQL 中游标的使用比较复杂,不能同时打开一个以上的游标,因为它只有一个全局变量@@Fast_statues 而且声明游标也麻烦,关闭游标时也不清除内存的;Oracle 中游标是以提高速度全部统一的单项游标,可以允许多用户...
7. **PL/SQL中游标的可修改性:** - 正确。PL/SQL中的游标可以被更新或修改。 8. **表与数据文件的关系:** - 正确。一个表可以分布在多个数据文件上,而一个数据文件也可以存储多个表的数据。 9. **HAVING子句...
9. PL/SQL中游标的数据是可以改变的 —— 错误(F) 10. 数据库概念模型用于概念结构设计 —— 正确(T) 七、简答题和SQL编程题涉及的知识点: 1. 数据与程序的逻辑独立性与物理独立性:逻辑独立性允许用户独立于...
PL/SQL中游标的数据是可以改变的。数据库概念模型主要用于数据库概念结构设计。 数据与程序的逻辑独立性和物理独立性是指数据的逻辑结构与物理存储是独立的,程序的逻辑结构与物理实现是独立的。关系代数中等值连接...