- 浏览: 62000 次
- 来自: 上海
最新评论
--显示游标 处理检索多行数据 --while循环 declare cursor emp_cursor is select * from emp where deptno=&部门编号; v_emp_row emp%rowtype; v_i integer:=0; begin if not emp_cursor%isopen then open emp_cursor; end if; fetch emp_cursor into v_emp_row; while emp_cursor%found loop dbms_output.put_line(v_emp_row.empno||' '||v_emp_row.ename||' '); fetch emp_cursor into v_emp_row; v_i:=v_i+1; end loop; dbms_output.put_line('利用游标一共处理了'||v_i||'行数据。。。'); if emp_cursor%isopen then close emp_cursor; end if; end emp_cursor; --简单loop循环(无参) declare cursor emp_cursor is select empno 员工编号,ename 员工姓名,nvl(sal,0) 员工工资,nvl(comm,0) 月奖金,12*(nvl(sal,0)+nvl(comm,0)) 年收入 from emp where deptno=&部门编号 order by empno asc; v_emprec emp_cursor%rowtype; begin if(not emp_cursor%isopen) then open emp_cursor; end if; fetch emp_cursor into v_emprec; loop exit when emp_cursor%notfound; dbms_output.put_line(v_emprec.员工编号); fetch emp_cursor into v_emprec; end loop; if(emp_cursor%isopen) then close emp_cursor; end if; end; --for循环(无参) declare cursor emp_cursor is select empno 员工编号,ename 员工姓名,nvl(sal,0) 员工工资,nvl(comm,0) 月奖金,12*(nvl(sal,0)+nvl(comm,0)) 年收入 from emp where deptno=&部门编号 order by empno asc; begin for i in emp_cursor loop dbms_output.put_line(i.员工编号); end loop; end; --带参数游标的使用 --for循环(带参) declare cursor emp_cursor(p_empno emp.empno%type) is select empno 员工编号,ename 员工姓名,nvl(sal,0) 员工工资,nvl(comm,0) 月奖金,12*(nvl(sal,0)+nvl(comm,0)) 年收入 from emp where deptno=&部门编号 order by empno asc; begin for i in emp_cursor(&部门编号) loop dbms_output.put_line(i.员工编号); end loop; end; --while循环(带参) declare cursor emp_cursor(p_empno emp.empno%type) is select empno 员工编号,ename 员工姓名,nvl(sal,0) 员工工资,nvl(comm,0) 月奖金,12*(nvl(sal,0)+nvl(comm,0)) 年收入 from emp where deptno=&部门编号 order by empno asc; v_emprec emp_cursor%rowtype; begin if(not emp_cursor%isopen) then open emp_cursor(&部门编号); end if; fetch emp_cursor into v_emprec; while(emp_cursor%found) loop dbms_output.put_line(v_emprec.员工编号); fetch emp_cursor into v_emprec; end loop; if(emp_cursor%isopen) then close emp_cursor; end if; end; --简单循环(带参) declare cursor emp_cursor(p_empno emp.empno%type) is select empno 员工编号,ename 员工姓名,nvl(sal,0) 员工工资,nvl(comm,0) 月奖金,12*(nvl(sal,0)+nvl(comm,0)) 年收入 from emp where deptno=&部门编号 order by empno asc; v_emprec emp_cursor%rowtype; begin if(not emp_cursor%isopen) then open emp_cursor(&部门编号); end if; fetch emp_cursor into v_emprec; loop exit when emp_cursor%notfound; dbms_output.put_line(v_emprec.员工编号); fetch emp_cursor into v_emprec; end loop; if(emp_cursor%isopen) then close emp_cursor; end if; end; --隐式游标的使用 --按照给定的部门编号,删除该部门中的所有雇员信息 declare v_input_deptno emp.deptno%type; v_count number:=-1; begin v_input_deptno:=&部门编号; select count(deptno) into v_count from emp where deptno=v_input_deptno; if(v_count>0) then delete from emp where deptno=v_input_deptno; --利用隐式游标的属性判断删除是否成功 if(sql%found) then dbms_output.put_line('删除成功。。。'); commit; else dbms_output.put_line('删除失败。。。'); rollback; end if; else dbms_output.put_line('该部门不存在。。。'); end if; end; --更新游标 通常是为了进行更新操作,更新数据使用的游标 --按照给定的工种,更新雇员的工资,工资上调10% declare cursor emp_cursor is select * from emp where job='&工种' for update of sal; begin for i in emp_cursor loop update emp set sal=i.sal*1.1 where current of emp_cursor; if(sql%found) then dbms_output.put_line('更新成功。。。'); else dbms_output.put_line('更新失败。。。'); end if; end loop; commit; end; --更新游标的for update 可以锁定游标正在处理的行记录,从而避免由于并发访问 --所带来的数据更新丢失问题。保证并发事务的有效处理
发表评论
文章已被作者锁定,不允许评论。
-
ORACLE日期时间处理
2013-01-25 17:56 1286--感觉ORACLE对日期的处理比MS较方便些 --修改会 ... -
AutoTrace执行结果说明
2013-01-25 14:11 831统计信息 --------------- ... -
QUESTIONS
2011-11-25 08:51 706问题一:获取SCOTT用户中EMP表里最早入职的前五名雇员? ... -
闪回数据库技术
2011-11-25 08:51 1185SQL> conn / as sysdba;已连接 ... -
触发器实例
2011-11-24 09:16 1086create or replace trigger u ... -
包实例
2011-11-24 09:16 772SQL> col object_name f ... -
存储过程、函数简单应用
2011-11-24 09:16 1010create or replace procedure ... -
ORACLE体系结构
2011-11-24 09:15 854001、oracle体系结构: oracle产品和 ... -
数据泵导出导入(SCHEMAS)
2011-11-25 08:51 8586一、导出 1、 cmd-->C:\Docume ... -
PLSQL developer连接oracle
2011-11-25 08:50 1028装好ORACLE 10g后,安装plsql ... -
ORACLE安装前后
2011-11-24 09:17 861安装前:计算机名必须小于8位(不能以数字开 ... -
数据库事务
2011-11-22 11:24 926查看数据库默认隔离级别: 查看InnoDB系统级别 ... -
导入TXT文件与导出TXT
2011-11-28 10:05 1054导入.TXT文件与导出*. ... -
加载数据
2011-11-28 10:05 8951、使用LOAD DATA语句要比INSERT语句的加载 ... -
字符串连接
2011-11-28 10:05 849mysql> select 'abc'+'123' ... -
DELETE语法
2011-11-28 10:06 1647仅仅在 FROM 或 USING 子句之前列出的表中的匹 ... -
复制表
2011-11-22 11:24 794创建测试表test:mysql> create tabl ... -
定时执行存储过程
2011-11-18 22:46 998存储过程学习:http://www.111 ... -
计算机localhost在网络上不存在
2011-11-22 11:22 1042计算机localhost在网络上不存在——数据库 ... -
EXPLAIN语法
2011-11-29 09:09 920EXPLAIN table == DESC table ...
相关推荐
### 游标最简单教程知识点解析 #### 一、游标基本概念 游标是数据库管理系统中的一个重要概念,主要用于处理查询结果集中的数据记录。它允许用户逐行地读取和处理这些记录,这对于需要对每一行数据进行特定操作的...
一、SQL server 游标的简单使用 一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来...
下面通过一个简单的示例来演示如何使用隐式游标属性来判断对雇员工资的更新是否成功。 ```sql SET SERVEROUTPUT ON; BEGIN UPDATE emp SET sal = sal + 100 WHERE empno = 1234; IF SQL%FOUND THEN DBMS_OUTPUT....
例如,for循环会自动打开和关闭游标,并且会自动处理数据的获取,是处理游标最简单、高效的方式。但是,显式游标循环处理的代码更容易理解和维护。 使用游标时,还有一些注意事项。首先,游标打开之后,必须执行...
### 取代游标的简单方法 #### 背景与问题描述 在数据库操作中,游标是一种常用的数据处理方式,它可以逐行地检索数据集中的记录。然而,在处理大量数据时,游标效率较低的问题逐渐凸显出来。这是因为每次循环都...
以下是一个简单的游标声明和使用的例子: ```sql DECLARE -- 声明变量来存储游标结果 v_emp_id NUMBER; v_emp_name VARCHAR2(50); -- 定义游标 CURSOR emp_cursor IS SELECT employee_id, first_name FROM ...
- 选择合适的游标类型,隐式游标适用于简单操作,显式游标适合复杂情况。 以上只是对Oracle游标使用的一个简要概述,具体到《Oracle 游标使用大全》这份文档,可能会包含更详尽的示例、技巧和案例,帮助开发者更好...
### Oracle游标使用详解 #### 一、Oracle游标简介 ...无论是简单的数据检索还是复杂的业务逻辑处理,游标都是一个非常强大的工具。在实际应用中,合理地使用游标可以极大地提高程序的效率和可维护性。
声明游标时可以使用简单的查询,也可以是复杂的连接查询或者嵌套查询。游标被声明后,必须先打开才能从中读取数据。读取数据时,可以逐行进行。操作完成后,需要关闭游标以释放系统资源,并且最后通过删除操作彻底...
3. MySQL提供简单的游标支持,但不支持滚动游标,只支持FOR UPDATE的游标,用于在事务中锁定行。 三、游标的应用场景 1. 分步处理:当需要对查询结果进行逐行处理,如批量更新或插入数据时,游标非常实用。 2. ...
1. **隐式游标**:由Oracle自动创建并管理的游标,主要用于执行简单的查询操作。 2. **显式游标**:需要用户手动定义并使用的游标,适用于更复杂的查询场景。 - **简单游标**:用于一般的查询操作。 - **嵌套表...
静态、动态SQL及各种游标 静态SQL和动态SQL是两种不同的SQL语句执行方式,分别应用于不同...游标(Cursor)则是用于存储和操作数据库中的数据的一种数据库对象,分为隐式游标、显式游标和Ref Cursor(动态游标)三种。
2. **隐式游标**:由PL/SQL自动创建和管理的游标,主要用于简单的SELECT语句,当执行SELECT INTO语句时会自动创建隐式游标。 3. **敏感游标**:在游标打开期间,如果基础数据表的数据发生变化,敏感游标会检测到这些...
根据提供的标题、描述以及部分代码内容,我们可以详细探讨Oracle游标的使用...而对于简单的单行数据更新,则可以利用隐式游标来简化代码实现。掌握这两种游标的使用方法,将有助于提高Oracle应用程序的效率和可维护性。
在Oracle数据库中,游标和过程是两种非常重要的编程元素,尤其在处理复杂的数据操作和逻辑流程时。本文将深入探讨如何使用游标与过程来实现数据的排名功能。 首先,我们来理解什么是游标(Cursor)。游标是数据库...
总结来说,Oracle游标提供了一种高效、灵活的方式来处理查询结果,无论是一行还是多行数据,无论是简单的读取还是复杂的更新和删除操作。理解和熟练使用游标是Oracle数据库编程中不可或缺的一部分。
在VB(Visual Basic)编程中,连接SQL数据库并利用游标和存储过程是常见的操作,这对于数据处理和应用开发至关重要。下面将详细讲解这个主题。 首先,VB与SQL的连接通常通过ADO(ActiveX Data Objects)来实现。ADO...
在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...
在Oracle数据库中,游标(CURSOR)是处理单条记录的一种机制,它允许程序员逐行处理查询结果。游标对于交互式应用和批量处理...无论是简单的数据处理还是复杂的业务逻辑,游标都是Oracle数据库编程不可或缺的一部分。
显式游标适用于需要控制游标状态的场合,隐式游标则适用于简单的DML操作,而REF游标则提供了更大的灵活性,特别是在处理动态查询和模块化编程中。理解并熟练运用这些游标,将极大地提升PL/SQL编程的效率和质量。