`
baobeituping
  • 浏览: 1068433 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

oracle 使用游标

阅读更多

DECLARE

cursor mycur is select * from emp;
empInfo emp%ROWTYPE;
BEGIN
        open mycur;
        fetch mycur into empInfo;
        while(mycur%found)
         loop
              dbms_output.put_line('编码:'||empInfo.Empno||';姓名:'||empInfo.Ename);
             

--  使游标向一行

          fetch mycur into empInfo;
         end loop;
       
END;

 

 

注意 1 在打开游之前最先判断标是否经是打的。

        通过 ISOPEN 判断

格式:

%ISOPEN IF mycur%ISOPEN THEN

null ; ELSE

OPEN mycur ; END IF ;

注意 2可以使用 ROWCOUNT 对游所操作行记录。

 

代码:

 

DECLARE

cursor mycur is select * from emp;
empInfo emp%ROWTYPE;
cou number;
BEGIN

        if mycur%isopen then
           null;
        else
           open mycur;
        end if;

        loop
            fetch mycur into empInfo;
           
            exit when mycur%notfound;
            cou:=mycur%rowcount;--记录总数
            dbms_output.put_line('总数:'||cou);
        end loop;


       /* open mycur;
        fetch mycur into empInfo;
        while(mycur%found)
         loop
              dbms_output.put_line('编码:'||empInfo.Empno||';姓名:'||empInfo.Ename);
              fetch mycur into empInfo;
         end loop;
        */
END;

 

 

应用举例:

 

 

一次性上全部雇的工资根据它在的部资,规则:

10 部门上涨 10%

20 部门上涨 20%

30 部门上涨 30%

所有部门上涨工,最不超过 5000,如超过 5000,则工就为 5000

declare

cursor mycur is select * from emp;

empInfo emp%rowtype;

s emp.sal%type;

begin

for empInfo in mycur loop

if empInfo.deptno = 10 then s := empInfo.sal*1.1;

elsif empInfo.deptno = 20 then

s := empInfo.sal*1.2;

elsif empInfo.deptno = 30 then s := empInfo.sal* 1.3;

end if;

 

 

if s > 5000 then s := 5000; end if;

 

 

update emp set sal = s where empno = empInfo.empno;

end loop;

end;

 

 

游标属性

 %FOUND       布尔型属性,当最近一次读记录时成功返回,则值为TRUE

 %NOTFOUND   布尔型属性,与%FOUND相反;

 %ISOPEN       布尔型属性,当游标已打开时返回 TRUE

 %ROWCOUNT   数字型属性,返回已从游标中读取的记录数。

游标修改和删除操作

游标修改和删除操作是指在游标定位下,修改或删除表中指定的数据行。这时,要求游标查询语句中必须使用FOR UPDATE选项,以便在打开游标时锁定游标结果集合在表中对应数据行的所有列和部分列。

为了对正在处理(查询)的行不被另外的用户改动,ORACLE 提供一个 FOR UPDATE 子句来对所选择的行进行锁住。该需求迫使ORACLE锁定游标结果集合的行,可以防止其他事务处理更新或删除相同的行,直到您的事务处理提交或回退为止。

语法:

SELECT . . . FROM … FOR UPDATE [OF column[, column]…] [NOWAIT]

 

    如果另一个会话已对活动集中的行加了锁,那么SELECT FOR UPDATE操作一直等待到其它的会话释放这些锁后才继续自己的操作,对于这种情况,当加上NOWAIT子句时,如果这些行真的被另一个会话锁定,则OPEN立即返回并给出:

ORA-0054 resource busy  and  acquire with nowait specified.

 

    如果使用 FOR UPDATE 声明游标,则可在DELETEUPDATE 语句中使用WHERE CURRENT OF cursor_name子句,修改或删除游标结果集合当前行对应的数据库表中的数据行。

 

12EMP表中查询某部门的员工情况,将其工资最低定为 1500

 

DECLARE

V_deptno emp.deptno%TYPE :=&p_deptno;

       CURSOR emp_cursor IS SELECT empno, sal

FROM emp WHERE deptno=v_deptno FOR UPDATE NOWAIT;

BEGIN

       FOR emp_record IN emp_cursor LOOP

IF emp_record.sal < 1500 THEN

       UPDATE emp SET sal=1500 WHERE CURRENT OF emp_cursor;

END IF;

       END LOOP;

--     COMMIT;

END;

 

 

分享到:
评论

相关推荐

    Oracle 数据库游标使用大全

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

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

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

    Oracle入门--Oracle游标使用

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

    oracle数据库游标使用例子

    以下是关于Oracle游标使用的一些关键知识点: 1. **游标的基本概念**: 游标(Cursor)是一种机制,它允许我们遍历和操作由SQL查询返回的结果集。通过游标,我们可以控制数据的读取顺序,一次只处理一行,或者在...

    oracle 隐式游标,显示游标,游标循环

    ### Oracle中的游标详解 #### 一、引言 在Oracle数据库中,游标是一种非常重要的机制,它允许用户在程序中对查询结果进行逐行处理。游标分为两种主要类型:**隐式游标**和**显示游标**。此外,还可以利用游标进行...

    Oracle数据库游标使用.rar

    “Oracle数据库游标使用大全.pdf”这份文档可能详细介绍了以上内容,并提供了具体的示例代码和实践技巧,帮助读者深入理解和应用Oracle数据库游标。通过学习和实践这些知识,开发者能够更好地掌握Oracle数据库编程,...

    oracle笔记游标的使用

    oracle笔记游标的使用,游标的详细代码案例,游标知识点笔记!

    Oracle的游标学习

    通过阅读提供的链接文章《PL-SQL游标-(抄) - owftc - JavaEye技术网站》(链接可能已失效),你可以获取更多关于游标使用的具体示例和技巧。在实际工作中,游标与其他工具如源码和工具相结合,将有助于解决复杂的...

    ORACLE 游标使用示例

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

    oracle数据库的游标

    动态SQL和动态游标是高级的游标使用场景。动态SQL指的是在运行时构造SQL语句,动态游标则是用来执行这些动态SQL语句的游标。这种技术在需要根据不同条件执行不同SQL语句时非常有用。但是,动态SQL和动态游标的使用...

    oracle-游标使用汇总.doc

    本篇文章将详细解析Oracle数据库中游标的使用方法。 首先,游标分为隐式游标和显式游标。隐式游标是由PL/SQL引擎自动管理的,通常在单行查询中使用,如`SELECT INTO`语句。而显式游标则是程序员在PL/SQL块中明确...

    Oracle数据库游标使用大全

    - 当在PL/SQL块中使用`SELECT INTO`语句时,Oracle会自动使用隐式游标。隐式游标默认处理查询返回的第一行数据,并将其赋值给`INTO`子句中的变量。例如: ```sql DECLARE v_empno SCOTT.EMP.EMPNO%TYPE; v_...

    oracle数据库游标实验报告

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

    使用游标更新数据库

    使用游标更新数据库 使用游标更新数据库是指在游标定位下,修改或删除表中指定的数据行。使用游标对数据进行更新可以提高数据库的性能和效率。 1. 游标更新的基本概念 游标是数据库中的一种数据结构,它可以用来...

    oracle函数触发器游标等几个小例子

    2. **Oracle游标**:游标允许我们处理查询结果集中的每一行数据。在`oracle游标.txt`中,你可以学习到如何声明、打开、读取和关闭游标。游标在处理大量数据时非常有用,特别是在需要逐行处理或循环遍历结果集的情况...

    oracle游标的总结oracle游标的总结

    Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...

    Oracle 游标使用大全.pdf

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

    Oracle 游标使用大全

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

    oracle解决游标多维度循环查询效率过低方案

    多维度查询时通常需要建立多个游标循环,查询效率无法得到保障,现在通过游标和substr()函数相结合的方式提高查询效率

    Oracle游标使用案例大全

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

Global site tag (gtag.js) - Google Analytics