`
cainiaoja
  • 浏览: 1198 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据库游标

sql 
阅读更多
游标可以以编程的方式访问数据,从而完成需要分别在结果集中每个记录上执行的过程代码的任务.
PL/SQL 为所有的 SQL 数据操纵语句(包括返回一行的 select)隐式声明游标,称为隐式游标的原因是用户不能直接命名和控制此类游标.
当用户在 PL/SQL 中使用数据操纵语言(DML)时,Oracle 预先定义一个名为 SQL 的隐式游标,通过检查隐式游标的属性可以获取与最近执行的 SQL 语句相关的信息.

执行 DML 语句之后,隐式游标属性返回信息.隐式游标的属性包括:
%found --在 DML 语句影响一行或多行时,%found 属性才返回 true;
%notfound --在 DML 语句没有影响任何行,则 %notfound 属性才返回 true;
%rowcount --%rowcount 返回 DML 语句影响的行数,如果 DML 语句没有影响任何行,则 %rowcount 属性将返回 0;
%isopen --%isopen 属性返回游标是否已打开的值.在执行 SQL 语句之后,Oracle 自动关闭 SQL 游标,所以隐式游标的 %isopen 属性始终为 false;

显式游标是由用户显式声明的游标.根据在游标中定义的查询,查询返回的行集可以包括零行或多行,这些行称为活动集,游标将指向活动集中的当前行.

使用显式游标的 4 个步骤:
1. 声明游标
2. 打开游标
3. 从游标中获取记录
4. 关闭游标

显式游标的 PL/SQL 程序的 declare 部分声明.格式如下:
cursor cursor_name [(parameter [, parameter...])]
[return return_type] is select_statement;

使用下列语句控制游标:
open --打开游标 格式:open cursor_name [(parameters)];
fetch --从游标中提取行 格式:fetch cursor_name into variables;
close --关闭游标 格式:close cursor_name;

%found --如果执行最后一条 fetch 语句成功返回行.则 %found 的值返回 true;(有数据可取返回 true)
%notfound --如果执行最后一条 fetch 语句未能提取行时.则 %notfound 的值返回 true;(没有数据可取返回 true)
%rowcount --返回到目前为止游标提取的行数.每返回一行,%rowcount 加1;
%isopen --如果游标已经打开,则返回 true. 否则返回 false;

----------------------------------------------------------------隐式游标---------------------------------------------------------------------------
--示例一

set serveroutput on;
begin
update dept set loc = 'BeiJin' where deptno = 80;
if SQL%found then
dbms_output.put_line('表已更新');
else
dbms_output.put_line('编号未找到');
end if;
end;

--示例二

set serveroutput on;
begin
update dept set loc = 'ShangHai' where deptno = 50;
dbms_output.put_line('更新了' || SQL%rowcount || '行');
end;

--示例三

set serveroutput on;
declare
empno_temp number;
job_temp varchar2(20);
begin
empno_temp := &员工编号;
select job into job_temp from emp where empno = empno_temp;
if SQL%rowcount > 0 then
dbms_output.put_line('员工的职位是:' || job_temp);
end if;
exception
when no_data_found then
dbms_output.put_line('员工未找到');
end;

--示例四

set serveroutput on;
declare
empid number;
begin
select empno into empid from emp;
exception
when too_many_rows then
dbms_output.put_line('该查询提取多行');
end;

----------------------------------------------------------------显式游标---------------------------------------------------------------------------
--示例五

set serveroutput on;
declare
ename_temp emp.ename%type;
cursor emp_cur is select ename from emp where sal < 1500;
begin
open emp_cur;
loop
fetch emp_cur into ename_temp;
exit when emp_cur%notfound;
dbms_output.put_line(emp_cur%rowcount || ' 员工: ' || ename_temp);
end loop;
close emp_cur;
end;

--示例六

set serveroutput on;
declare
sal_temp number;
cursor emp_cur is select sal from t_emp where sal < 1500 for update of sal;
begin
open emp_cur;
loop
fetch emp_cur into sal_temp;
exit when emp_cur%notfound;
update t_emp set sal = sal + 500 where current of emp_cur;
end loop;
close emp_cur;
end;

--示例七

set serveroutput on;
declare
deptno_temp emp.deptno%type;
empno_temp emp.empno%type;
ename_temp emp.ename%type;
cursor emp_cur(deptno_param number) is select empno, ename from emp where deptno = deptno_param;
begin
deptno_temp := &部门编号;
open emp_cur(deptno_temp);
loop
fetch emp_cur into empno_temp, ename_temp;
exit when emp_cur%notfound;
dbms_output.put_line(empno_temp || ' ' || ename_temp);
end loop;
close emp_cur;
end;

--示例八

set serveroutput on;
declare
cursor emp_cur is select empno, ename, sal from emp;
begin
for emp_temp in emp_cur loop
dbms_output.put_line('员工编号:' || emp_temp.empno || ' 员工姓名:' || emp_temp.ename || ' 员工工资:' || emp_temp.sal);
end loop;
end;
分享到:
评论

相关推荐

    Oracle 数据库游标使用大全

    Oracle数据库游标是数据库管理系统中用于处理查询结果的一种机制,它允许程序逐行处理查询结果,而不是一次性加载所有数据。在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中...

    数据库游标练习

    数据库游标是数据库管理系统中的一个重要概念,主要用于处理和操作数据集。在Oracle数据库中,游标扮演着不可或缺的角色,尤其在进行复杂的SQL操作和程序逻辑控制时。本小练习主要目的是帮助你理解和掌握如何在...

    数据库游标的使用数据库游标的使用.doc

    数据库游标的使用 数据库游标是数据库系统中的一种机制,允许开发者逐行地读取查询结果集,并对每一行记录进行操作。下面是关于数据库游标的使用的详细知识点: 1. 为什么要使用游标? 在查询结果集中逐行地读取...

    oracle数据库游标使用例子

    Oracle数据库中的游标是PL/SQL编程中一种重要的控制结构,它允许程序逐行处理查询结果,而不是一次性处理所有结果。游标对于处理大量数据或需要根据每行数据执行不同操作的情况非常有用。以下是关于Oracle游标使用的...

    快速掌握Oracle数据库游标的使用方法

    Oracle 数据库游标的使用方法 Oracle 数据库游标是指在查询返回结果超过一行时,需要使用的显式游标。用户不能使用 select into 语句,而是需要使用游标来处理多行查询结果。在 PL/SQL 中,隐式游标会在查询开始时...

    oracle数据库游标实验报告

    oracle数据库游标实验报告!oracle数据库游标实验报告!oracle数据库游标实验报告!

    数据库游标使用详细介绍

    ### 数据库游标使用详解:Oracle数据库视角 在数据库领域,游标(Cursor)是一种用于处理数据查询结果集的强大工具,尤其在Oracle数据库中,游标的应用极为广泛且功能强大。本文将深入探讨Oracle数据库中游标的基本...

    Oracle数据库游标使用.rar

    Oracle数据库游标是数据库编程中的一个重要概念,尤其在处理大量数据时,它们提供了一种有效且灵活的方法。游标允许程序逐行访问查询结果集,而不是一次性加载所有数据。这在处理复杂的数据操作,如循环处理、条件...

    Oracle数据库游标使用大全

    整理的Oracle数据库游标使用大全 SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它同时引入了更强的程序逻辑。 PL/SQL支持DML命令和SQL的事务控制语句。DDL在PL/SQL中不被支持,这就意味作在PL/...

    Mysql数据库游标的使用

    MySql存储过程,游标的使用方法,速度极快!

    解析数据库中游标的使用方法

    数据库游标使用方法 数据库游标是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。由系统或用户以变量的形式定义。用户可以用 SQL 语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理,主...

    数据库游标:探索数据世界的导航仪

    ### 数据库游标:探索数据世界的导航仪 #### 引言:数据库游标的基本概念 在数据库领域,游标(Cursor)是一个极为重要的概念。它为开发者提供了一种高效且灵活的方式来与数据交互,尤其在处理大型数据集或执行...

    SQLServer数据库游标和函数的使用(经典)

    在SQL Server中,数据库游标和函数是两个非常重要的概念,它们在数据处理和数据库操作中扮演着不可或缺的角色。游标允许我们逐行处理查询结果,而函数则提供了丰富的计算和逻辑处理能力。 首先,让我们深入理解SQL ...

    Oracle数据库游标使用大全.doc

    Oracle数据库游标使用大全

    oracle数据库 游标、存储过程和触发器.ppt

    Oracle 数据库游标、存储过程和触发器 Oracle 数据库是一种关系型数据库管理系统,它提供了多种机制来提高数据库的性能和安全性。在本文中,我们将讨论 Oracle 数据库中的三个重要概念:游标、存储过程和触发器。 ...

    数据库游标的使用.pdf

    数据库游标是数据库管理系统提供的一种机制,允许程序员按需逐行处理查询结果集,而非一次性处理整个结果集。在SQL中,游标尤其在处理复杂逻辑和交互式应用时非常有用,例如需要对数据集进行迭代处理、条件判断或...

    数据库游标的作用与实现:Java视角下的深入解析

    数据库游标是管理和应用开发中不可或缺的工具,它提供了一种高效且灵活的方式来处理数据库中的数据。通过正确地声明、打开、获取数据、关闭以及释放游标,开发者可以最大化地利用数据库的性能,同时保持代码的简洁性...

Global site tag (gtag.js) - Google Analytics