`

游标简单操作

阅读更多

 

 

--显示游标 处理检索多行数据

--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 可以锁定游标正在处理的行记录,从而避免由于并发访问
--所带来的数据更新丢失问题。保证并发事务的有效处理
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    游标最简单教程

    ### 游标最简单教程知识点解析 #### 一、游标基本概念 游标是数据库管理系统中的一个重要概念,主要用于处理查询结果集中的数据记录。它允许用户逐行地读取和处理这些记录,这对于需要对每一行数据进行特定操作的...

    SQL Server 游标的简单使用

    一、SQL server 游标的简单使用 一个对表进行操作的T-SQL语句通常都可产生或处理一组记录,但是许多应用程序,尤其是T-SQL嵌入的主语言,通常不能把整个结果集作为一个单元来处理,这些应用程序就需要用一种机制来...

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

    下面通过一个简单的示例来演示如何使用隐式游标属性来判断对雇员工资的更新是否成功。 ```sql SET SERVEROUTPUT ON; BEGIN UPDATE emp SET sal = sal + 100 WHERE empno = 1234; IF SQL%FOUND THEN DBMS_OUTPUT....

    oracle数据库的游标

    例如,for循环会自动打开和关闭游标,并且会自动处理数据的获取,是处理游标最简单、高效的方式。但是,显式游标循环处理的代码更容易理解和维护。 使用游标时,还有一些注意事项。首先,游标打开之后,必须执行...

    取代游标的简单方法

    ### 取代游标的简单方法 #### 背景与问题描述 在数据库操作中,游标是一种常用的数据处理方式,它可以逐行地检索数据集中的记录。然而,在处理大量数据时,游标效率较低的问题逐渐凸显出来。这是因为每次循环都...

    ORACLE 游标使用示例

    以下是一个简单的游标声明和使用的例子: ```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游标使用大全

    ### Oracle游标使用详解 #### 一、Oracle游标简介 ...无论是简单的数据检索还是复杂的业务逻辑处理,游标都是一个非常强大的工具。在实际应用中,合理地使用游标可以极大地提高程序的效率和可维护性。

    SqlServer存储过程、游标讲解

    声明游标时可以使用简单的查询,也可以是复杂的连接查询或者嵌套查询。游标被声明后,必须先打开才能从中读取数据。读取数据时,可以逐行进行。操作完成后,需要关闭游标以释放系统资源,并且最后通过删除操作彻底...

    SQL游标原理和使用方法

    3. MySQL提供简单的游标支持,但不支持滚动游标,只支持FOR UPDATE的游标,用于在事务中锁定行。 三、游标的应用场景 1. 分步处理:当需要对查询结果进行逐行处理,如批量更新或插入数据时,游标非常实用。 2. ...

    关于游标的说明与使用方法

    1. **隐式游标**:由Oracle自动创建并管理的游标,主要用于执行简单的查询操作。 2. **显式游标**:需要用户手动定义并使用的游标,适用于更复杂的查询场景。 - **简单游标**:用于一般的查询操作。 - **嵌套表...

    静态、动态sql及各种游标

    静态、动态SQL及各种游标 静态SQL和动态SQL是两种不同的SQL语句执行方式,分别应用于不同...游标(Cursor)则是用于存储和操作数据库中的数据的一种数据库对象,分为隐式游标、显式游标和Ref Cursor(动态游标)三种。

    数据库游标使用详细介绍

    2. **隐式游标**:由PL/SQL自动创建和管理的游标,主要用于简单的SELECT语句,当执行SELECT INTO语句时会自动创建隐式游标。 3. **敏感游标**:在游标打开期间,如果基础数据表的数据发生变化,敏感游标会检测到这些...

    Oracle游标使用详解

    根据提供的标题、描述以及部分代码内容,我们可以详细探讨Oracle游标的使用...而对于简单的单行数据更新,则可以利用隐式游标来简化代码实现。掌握这两种游标的使用方法,将有助于提高Oracle应用程序的效率和可维护性。

    使用游标与过程实现排名

    在Oracle数据库中,游标和过程是两种非常重要的编程元素,尤其在处理复杂的数据操作和逻辑流程时。本文将深入探讨如何使用游标与过程来实现数据的排名功能。 首先,我们来理解什么是游标(Cursor)。游标是数据库...

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

    总结来说,Oracle游标提供了一种高效、灵活的方式来处理查询结果,无论是一行还是多行数据,无论是简单的读取还是复杂的更新和删除操作。理解和熟练使用游标是Oracle数据库编程中不可或缺的一部分。

    VB链接sql使用游标和存储

    在VB(Visual Basic)编程中,连接SQL数据库并利用游标和存储过程是常见的操作,这对于数据处理和应用开发至关重要。下面将详细讲解这个主题。 首先,VB与SQL的连接通常通过ADO(ActiveX Data Objects)来实现。ADO...

    jdbcTemplate分页彻底解决,使用游标滚动

    在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...

    roacel 游标集锦

    在Oracle数据库中,游标(CURSOR)是处理单条记录的一种机制,它允许程序员逐行处理查询结果。游标对于交互式应用和批量处理...无论是简单的数据处理还是复杂的业务逻辑,游标都是Oracle数据库编程不可或缺的一部分。

    proc 游标讲述

    显式游标适用于需要控制游标状态的场合,隐式游标则适用于简单的DML操作,而REF游标则提供了更大的灵活性,特别是在处理动态查询和模块化编程中。理解并熟练运用这些游标,将极大地提升PL/SQL编程的效率和质量。

Global site tag (gtag.js) - Google Analytics