`
sbpya
  • 浏览: 615961 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

oracle游标使用

阅读更多

游标

用来查询数据库,获取记录集合(结果集)的指针,可以让开发者一次访问一行结果集,在每条结果集上作操作。


分类

静态游标:
分为显式游标和隐式游标。

REF游标:
是一种引用类型,类似于指针。

 

显式游标

 CURSOR 游标名 ( 参数 ) [返回值类型] IS
  Select 语句


生命周期:

1.打开游标(OPEN)
解析,绑定。。。不会从数据库检索数据

2.从游标中获取记录(FETCH INTO)
执行查询,返回结果集。通常定义局域变量作为从游标获取数据的缓冲区。

3.关闭游标(CLOSE)
完成游标处理,用户不能从游标中获取行。还可以重新打开。


选项:参数和返回类型


set serveroutput on
declare
 cursor emp_cur ( p_deptid in number) is 
select * from employees where department_id = p_deptid;

l_emp employees%rowtype;
begin
 dbms_output.put_line('Getting employees from department 30');
open emp_cur(30);
 loop
  fetch emp_cur into l_emp;
  exit when emp_cur%notfound;
  dbms_output.put_line('Employee id '|| l_emp.employee_id || ' is ');
  dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
 end loop;
 close emp_cur;

 dbms_output.put_line('Getting employees from department 90');
open emp_cur(90);
 loop
  fetch emp_cur into l_emp;
  exit when emp_cur%notfound;
  dbms_output.put_line('Employee id '|| l_emp.employee_id || ' is ');
  dbms_output.put_line(l_emp.first_name || ' ' || l_emp.last_name);
 end loop;
 close emp_cur;
end;
/

 

隐式游标

不用明确建立游标变量,分两种:
1.在PL/SQL中使用DML语言,使用ORACLE提供的名为SQL的隐示游标
2.CURSOR FOR LOOP,用于for loop 语句


1举例:

declare
begin
 update departments set department_name=department_name;
 --where 1=2;
 
 dbms_output.put_line('update '|| sql%rowcount ||' records');
end;
/


2举例:

declare
begin
 for my_dept_rec in ( select department_name, department_id from departments)
 loop
  dbms_output.put_line(my_dept_rec.department_id || ' : ' || my_dept_rec.department_name);
 end loop;
end;
/


3举例:

单独select 

declare
 l_empno emp.EMPLOYEE_ID%type;
-- l_ename emp.ename%type;
begin
 select EMPLOYEE_ID    
  into l_empno
 from emp;
 --where rownum =1;
 dbms_output.put_line(l_empno);
end;
/
使用INTO获取值,只能返回一行。

 

游标属性

%FOUND:变量最后从游标中获取记录的时候,在结果集中找到了记录。
%NOTFOUND:变量最后从游标中获取记录的时候,在结果集中没有找到记录。
%ROWCOUNT:当前时刻已经从游标中获取的记录数量。
%ISOPEN:是否打开。


Declare
 Cursor emps is
 Select * from employees where rownum<6 order by 1;
 
 Emp employees%rowtype;
 Row number :=1;
Begin
 Open emps;
 Fetch emps into emp;
 
 Loop
  If emps%found then
   Dbms_output.put_line('Looping over record '||row|| ' of ' || emps%rowcount);
   Fetch emps into emp;
   Row := row + 1;
  Elsif emps%notfound then
   Exit;  ---exit loop, not IF
  End if;
 End loop;
 
 If emps%isopen then
  Close emps;
 End if;
End;
/

 

显式和隐式游标的区别

尽量使用隐式游标,避免编写附加的游标控制代码(声明,打开,获取,关闭),也不需要声明变量来保存从游标中获取的数据。

 

REF CURSOR游标

动态游标,在运行的时候才能确定游标使用的查询。分类:
强类型(限制)REF CURSOR,规定返回类型 
弱类型(非限制)REF CURSOR,不规定返回类型,可以获取任何结果集。


TYPE ref_cursor_name IS REF CURSOR [RETURN return_type]


Declare
 Type refcur_t is ref cursor;
 
 Type emp_refcur_t is ref cursor return employee%rowtype;
Begin
 Null;
End;
/


强类型举例:

declare
 --声明记录类型
 type emp_job_rec is record(
  employee_id number,
  employee_name varchar2(50),
  job_title varchar2(30)
 );
 --声明REF CURSOR,返回值为该记录类型
 type emp_job_refcur_type is ref cursor
  return emp_job_rec;
 --定义REF CURSOR游标的变量
 emp_refcur emp_job_refcur_type;

 emp_job emp_job_rec;
begin
 open emp_refcur for
  select e.employee_id,
    e.first_name || ' ' ||e.last_name "employee_name",
    j.job_title
  from employees e, jobs j
  where e.job_id = j.job_id and rownum < 11 order by 1;

 fetch emp_refcur into emp_job;
 while emp_refcur%found loop
  dbms_output.put_line(emp_job.employee_name || '''s job is ');
  dbms_output.put_line(emp_job.job_title);
  fetch emp_refcur into emp_job;
 end loop;
end;

分享到:
评论

相关推荐

    Oracle游标使用方法及语法大全

    Oracle 游标使用方法及语法大全 Oracle 游标是 PL/SQL 程序中的一种重要组件,用于处理查询结果集。游标可以分为隐式游标和显式游标两种,隐式游标由 PL/SQL 管理,隐式游标打开时查询开始,查询结束时隐式游标自动...

    Oracle游标使用大全

    ### Oracle游标使用大全 #### 一、概述 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集中的数据。游标允许程序逐行处理数据,这在需要对多行数据进行循环处理时非常有用。本文档旨在提供一个全面的...

    ORACLE 游标使用示例

    下面,我们将深入探讨Oracle游标的使用示例及其相关的知识点。 首先,游标的基本概念是它提供了一种方式来跟踪并控制SQL查询的结果集。在Oracle中,游标有四种状态:未打开、已打开、正在提取和已关闭。以下是一个...

    Oracle游标使用案例大全

    本资源“Oracle游标使用案例大全”提供了一系列实用的示例,旨在帮助学习者深入理解和掌握Oracle游标的用法。 1. **游标的基本概念** - 游标(Cursor):它是一个数据库系统中的结构,用于存储执行SQL查询后的结果...

    oracle游标使用及实例

    ### Oracle游标使用及实例详解 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种用于处理SQL查询结果集的方式。它允许用户逐行地读取和处理查询结果,这对于需要对每一行数据进行特定操作的情况非常...

    Oracle游标使用方法及语法大全.doc

    ### Oracle游标使用详解 #### 一、游标概述 游标是Oracle数据库中用于处理查询结果集的强大工具,尤其适用于需要逐行处理查询结果的情况。在Oracle中,游标可以分为两类:**显式游标**和**隐式游标**。 1. **隐式...

    Oracle 游标使用大全

    以上只是对Oracle游标使用的一个简要概述,具体到《Oracle 游标使用大全》这份文档,可能会包含更详尽的示例、技巧和案例,帮助开发者更好地理解和运用Oracle游标。通过学习和实践,我们可以提升数据库操作的效率和...

    oracle游标使用大全1.txt

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种用于处理查询结果集的强大工具。它允许用户通过逐行访问数据来执行复杂的操作,如更新、删除或插入记录等。游标可以分为显式游标和...

    oracle 游标使用大全

    Oracle 游标使用大全 Oracle 游标是 PL/SQL 中的一种重要的数据访问机制,通过游标,可以高效地访问和处理数据库中的数据。在本文中,我们将对 Oracle 游标的使用进行详细的介绍,包括游标的基本概念、游标的类型、...

    Oracle游标使用详解

    ### 明确游标使用示例 在下面的例子中,我们将通过几个不同的方法来展示如何使用明确游标: 1. **使用`WHILE`循环遍历游标** 在这个例子中,我们首先创建一个名为`PROC_STU1`的过程,它包含一个明确游标`cur_stu...

    oracle游标使用大全

    总之,Oracle游标提供了处理查询结果的强大工具,使开发者能够灵活地在PL/SQL中操作数据。无论是隐式还是显式游标,都极大地增强了对数据库的交互能力,使得程序能根据查询结果进行适当的操作。理解并熟练运用游标是...

    Oracle 游标使用大全.pdf

    通过本篇Oracle游标的使用大全,我们可以了解到Oracle数据库游标的类型、属性以及如何在PL/SQL中实现对数据集的逐行处理。这不仅有助于提升程序员的编程技能,也能使他们更深入地理解PL/SQL与Oracle数据库之间的交互...

    Oracle 游标使用大全.txt

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种重要的机制,用于处理查询结果集。它允许程序逐一访问查询返回的数据行,并且能够控制数据的读取顺序和方式。游标可以分为显式游标...

    Oracle 游标使用大

    本文旨在为初学者提供关于Oracle游标使用的全面指南。 #### 二、基本概念 **1. 显式游标** - **定义**:显式游标是指在PL/SQL块中明确声明并由用户管理的游标。 - **用途**:适用于需要处理多行数据的情况,特别...

    Oracle游标使用(极好)

    ### Oracle游标使用详解 #### 一、引言 在Oracle数据库中,游标是一种非常重要的功能,它允许用户能够逐行地从数据库中检索数据并进行处理。这对于需要进行复杂数据处理的应用程序来说是非常有用的。本文将详细介绍...

    Oracle游标使用.docx

    ### Oracle游标使用详解 #### 一、引言 在Oracle数据库中,游标是一种非常重要的数据处理机制,主要用于从数据库中检索数据并对其进行处理。游标能够有效地管理多行记录,提供了一种灵活的方式来进行复杂的数据库...

Global site tag (gtag.js) - Google Analytics