`
每一天都有收获
  • 浏览: 2443 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

oracle--游标(cursor)

阅读更多
1.游标是:

一种PL/SQL控制结构,相当于java中的Iterator ,它是指向结果集的指针。指向结果集第一条记录的前一条,每次fetch 都会向下移动下

游标并不是一个数据库对象,只是存留在内存中

2. 作用:方便对表的行数据逐条进行处理

---------------

--注意:fetch是下移动,%found是判断此行有无数据的--这是作为循环的跳出条件的,定要注意--for循环除外

---注意:%found 与%notfound的区别--%found是判断此行有没有数据,有的的时候执行;%notfound 判断当前行是否有数据,没有则停止执行

--在打开游标之前最好先判断游标是否已打开  %isopen

eg:

IF mycur%ISOPEN THEN
null ;
ELSE
OPEN mycur ;
END IF ;

--可以使用ROWCOUNT对游标所操作的行数进行记录。%rowcount

----------------

3.使用游标;

声明游标

cursor c is     --声明
select * from emp;   ---结果集

        打开游标

open c;---此时才会指向 结果集;--指向结果集第一条记录之前。

循环抓取游标

fetch c into 记录类型的变量;---将抓取得游标赋给一个记录类型的变量

---每次只能读取一行,若是想要遍历,就要有循环。
---每当遇到fetch 指针就会向下移动一下。

        关闭游标

close c;
---

eg:

declare
cursor c is
select * from emp;
v_record_emp emp%rowtype;
v_sal emp.sal%type;

begin
open c;
loop
fetch c into v_record_emp;
exit when(c%notfound);
v_sal := v_record_emp.sal;
if(v_sal < 1200) then
v_record_emp.sal := v_sal + 500;
elsif(v_sal < 1500) then
v_record_emp.sal := v_sal + 300;
else
v_record_emp.sal := v_sal + 300;
end if;
update emp set sal=v_record_emp.sal where empno=v_record_emp.empno;
end loop;
close c;
commit;
end;

------------
使用for循环可以简化游标使用时候的代码(比较常用)

declare
cursor c is
select * from emp;
v_sal emp.sal%type;

begin
for v_record_emp in c loop---就完成了打开游标,抓取游标,和关闭游标
v_sal := v_record_emp.sal;
if(v_sal < 1200) then
v_record_emp.sal := v_sal + 500;
elsif(v_sal < 1500) then
v_record_emp.sal := v_sal + 300;
else
v_record_emp.sal := v_sal + 300;
end if;
update emp set sal=v_record_emp.sal where empno=v_record_emp.empno;
end loop;
commit;
end;

-------------------
游标分:

  1.可更新的游标

     declare
cursor c is
select * from emp for update;--比普通的多  for update

     begin
for v_record_emp in c loop
if(v_record_emp.sal<2000) then
update emp set sal=sal*2 where current of c;  --条件 current of c
elsif(v_record_emp.sal=5000) then
delete from emp where current of c;
end if;
end loop;
commit;
    end;

----需要用  for update 来标识 遍历是给该结果集更新为目的的

----可更新的游标,我们能够用current of c获取到 当前记录


  2.带参数的游标

      declare
cursor c(v_deptno emp.deptno%type,v_job emp.job%type) is
select ename,sal from emp where deptno=v_deptno and job=v_job;
      begin
for v_temp in c(30,'CLERK') loop
dbms_output.put_line(v_temp.ename);
end loop;
      end;

---带参数的目的是为了  设置获取参数的条件

---游标的参数是在open游标的时候赋值的---open c(30,'clerk');


  3.隐士游标

      当用户在PL/SQL 中使用数据操纵语句(DML)时,

      oracle预先定义一个名称为SQL的隐式游标,

      通过 检查隐式游标的属性获取与最近执行的SQL语句相关信息。

      在执行DML语句之后,隐式游标属性返回信息。

      隐式游标属性包括: %found %notfound %rowcount %isopen

     eg: sql%rowcount中的sql是oracle的内部游标,rowcount的意思是之前的dml sql语句影响的多少行数据。
eg:
declare
begin
update B_BARCODE_JINZHI_T set jinzhi='00';
dbms_output.put_line(to_char(sql%rowcount));
end;

---结果: 5



分享到:
评论

相关推荐

    Oracle入门--Oracle游标使用

    Oracle游标是PL/SQL编程中的重要组成部分,主要用于处理单行或多行查询结果。游标允许程序员逐行处理查询结果,而不是一次性加载所有数据。在Oracle中,游标分为显式游标和隐式游标。 1. **隐式游标**:在PL/SQL中...

    ORACLE显式游标和动态游标的使用.pdf

    Oracle数据库中的游标是用于控制对表中数据的访问,特别是在需要逐行处理查询结果时非常有用。游标分为显式游标、隐式游标和动态游标三种类型。 1. **显式游标**: - 显式游标允许返回多行记录,但在使用之前必须...

    ORACLE 游标使用示例

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

    oracle-游标使用汇总.doc

    Oracle数据库中的游标是处理查询结果集的一种重要机制,尤其在需要逐行处理多行数据时。游标允许我们按照需要遍历查询结果,并对每一行进行操作。本篇文章将详细解析Oracle数据库中游标的使用方法。 首先,游标分为...

    Oracle存储过程、游标、函数的详解

    ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

    cx_Oracle-7.3.0.tar.gz

    - 支持游标的游标(`cursor.callproc()`),用于调用存储过程。 - 支持绑定变量(`cursor.execute(query, params)`),提高执行效率。 - 可以处理 LOB(大型对象)数据类型,如 BFILE、BLOB、CLOB 和 NCLOB。 10...

    cx_Oracle-5.1.2-11g.win32-py2.7.msi

    cx_Oracle是Python连接Oracle数据库的官方驱动程序,它提供了全面的功能,包括数据查询、事务处理、游标操作等。本文将详细介绍cx_Oracle模块的使用方法以及如何安装"cx_Oracle-5.1.2-11g.win32-py2.7.msi"这个特定...

    oracle-cursor.rar_cursor_oracle_oracle cursor

    Oracle游标是数据库管理系统中非常重要的一个概念,它在处理SQL查询时扮演着核心角色,尤其是在需要逐行处理结果集的场景下。Oracle游标允许我们动态地控制和操作查询的结果,使得我们可以按需处理每一行数据,而不...

    Oracle数据库的游标学习总结

    Oracle游标主要分为两大类:显示游标和隐式游标。其中,显示游标又可以根据定义方式的不同细分为静态游标和动态游标。 ##### 显示游标 显示游标主要用于处理SELECT语句的结果集。当定义游标时,需要明确指定SQL...

    cx_Oracle-5.1.2-11g.win-amd64-py2.7.exe

    cx_Oracle库也支持PL/SQL的调用,可以处理游标、事务、批处理和结果集。例如,执行存储过程: ```python cursor.callproc('stored_procedure_name', [param1, param2]) ``` 在处理大数据量时,cx_Oracle提供了批量...

    ORACLE中的游标汇总

    另外,`CURSOR FOR LOOP`结构简化了遍历查询结果的过程,无需显式打开、关闭游标,只需在`FOR`循环中处理每一行。 2. REF游标 - **REF游标**,也称为动态游标,是一种更灵活的游标类型,它允许结果集的列数和数据...

    cx_Oracle-6.0b2-py3.6-win32.rar

    在Python中,使用cx_Oracle首先需要创建一个连接对象,通过连接对象我们可以打开游标来执行SQL语句。下面是一个简单的示例: ```python import cx_Oracle dsn = cx_Oracle.makedsn('hostname', 'port', 'service_...

    Oracle 游标使用大全

    Oracle游标是数据库管理系统中的一种数据处理机制,它允许用户按需逐行处理查询结果,而不是一次性加载所有数据。在Java编程中,我们通常通过JDBC(Java Database Connectivity)来与Oracle数据库交互,其中游标扮演...

    cursor-oracle-zend-framework-adapter:这是在 Zend Oracle 适配器中执行游标的小扩展

    总的来说,`cursor-oracle-zend-framework-adapter`是一个为了解决在Zend Framework中使用Oracle游标而设计的工具。通过使用这个扩展,开发者可以避免一次性加载大量数据,从而优化内存使用,并提高处理大型数据集的...

    Oracle数据库添加 更新 游标 过程 Java Project

    在这个Java项目中,我们将探讨如何在Oracle数据库中添加、更新数据,并利用游标处理过程,这些都是数据库操作的重要组成部分。 首先,让我们详细了解一下Oracle数据库的“添加”操作。在Oracle中,我们通常使用SQL...

    非常详细的Oracle游标整理

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按需逐行处理数据,而不是一次性加载所有结果。这里详细介绍了Oracle中的三种游标类型:隐式游标、显式游标和REF游标。 1....

    多个ORACLE 游标+SQL 游标 小例子+帮助文档

    在这个例子中,我们首先声明了一个游标cursor_name,然后定义了变量来存储查询结果。接着,我们打开游标,进入一个循环,每次循环从游标中提取一行数据到变量中,直到没有更多数据(%NOTFOUND为真)。 SQL中的游标...

    oracle游标案例

    Oracle游标是数据库管理系统中的一种重要机制,它允许我们在处理大量数据时逐行进行操作,而不是一次性加载所有数据。在Oracle数据库中,游标对于编写复杂的动态SQL和迭代处理单个记录至关重要。以下是对"oracle游标...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

Global site tag (gtag.js) - Google Analytics