`
hpjianhua
  • 浏览: 241618 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Oracle 游标的学习与实例

阅读更多
游标(CURSOR):可以增强SQL语句的功能,它可以对SQL语句的处理进行的控制,方便地帮助我们从数据库中连续撮数据,然后分别对每一条数据进行处理.

游标是一种PL/SQL控制结构,Oracle服务器使用工作区(又称为专用SQL工作区)来执行SQL语句,储存处理信息.

游标分为两种形式:隐式游标与显式游标.

显示游标:
对于返回多条记录的查询语句,可显式游标逐个处理这些数据.

cursor 游标

实例:

  1  declare
  2  cursor c is
  3  select * from emp;
  4  v_emp c%rowtype;
  5  begin
  6  open c;
  7  fetch c into v_emp;
  8  dbms_output.put_line(v_emp.ename);
  9  close c;
10* end;
SQL> /
SMITH

PL/SQL 过程已成功完成。

全部记录循环打印出来:
实例:
  1  declare
  2     cursor c is
  3     select * from emp;
  4     v_emp c%rowtype;
  5  begin
  6     open c;
  7     loop
  8             fetch c into v_emp;
  9             exit when (c%notfound);
10             dbms_output.put_line(v_emp.ename);
11             end loop;
12     close c;
13* end;
SQL> /
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

PL/SQL 过程已成功完成。

while循环:

实例:

  1  declare
  2     cursor c is
  3     select * from emp;
  4     v_emp c%rowtype;
  5  begin
  6     open c;
  7     fetch c into v_emp;
  8     while(c%found) loop
  9             dbms_output.put_line(v_emp.ename);
10             fetch c into v_emp;
11             end loop;
12     close c;
13* end;

注意: fetch c into v_emp;在while语句下面的顺序.先打印再fetch

for循环:用的最多的.而且最不容易出错.

游标cursor 不用打开,for循环开始执行时,自动打开并且Open,游标也不用关闭,for循环结束时,自动关闭游标,而且变量v_emp不用声明!

实例:
  1  declare
  2     cursor c is
  3     select * from emp;
  4  begin
  5     for v_emp in c loop
  6             dbms_output.put_line(v_emp.ename);
  7     end loop;
  8* end;
SQL> /
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

PL/SQL 过程已成功完成。

声明游标为可更新的:cursor

实例:

declare
cursor c
is
select * from emp2 for update;
begin
for v_temp in c loop
if(v_temp.sal <2000) then
--emp2是重emp表复制过来的.
update emp2 set sal = sal*2 where current of c;
elsif(v_temp.sal =5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;


创建存储过程:procedure

create or replace procedure p
is
cursor c
is
select * from emp2 for update;
begin
for v_temp in c loop
if(v_temp.sal <2000) then
--emp2是重emp表复制过来的.
update emp2 set sal = sal*2 where current of c;
elsif(v_temp.sal =5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;

删除存储过程:

drop procedure p;

函数:function

自定义函数实例:

  1  create or replace function sal_tax
  2  (v_sal number)
  3  return number
  4  is begin
  5  if(v_sal < 2000) then
  6  return 0.10;
  7  elsif(v_sal < 2750) then
  8     return 0.15;
  9  else
10     return 0.20;
11  end if;
12* end;
SQL> /

函数已创建。

触发器:trigger

创建表:

create table emp2_log
(
uname varchar2(20),
action varchar2(10),
atime date
);

创建触发器:

create or replace trigger trig
after insert or delete or update on emp2 for each row
begin
if inserting then
insert into emp2_log values(user,'insert',sysdate);
elsif updating then
insert into emp2_log values(user,'update',sysdate);
elsif deleting then
insert into emp2_log values(user,'delete',sysdate);
end if;
end;


关联改变被约束的字段值:(创建触发器trigger的副作用)

create or replace trigger trig
after update on dept
for each row
begin
update emp set deptno =:NEW.deptno where deptno =:OLD.deptno;
end;

update dept set deptno =99 where deptno =10;
分享到:
评论

相关推荐

    oracle游标使用及实例

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

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    Oracle游标实例.txt

    标题“Oracle游标实例”直接点明了文章的主题,即通过具体的示例来讲解Oracle中的游标使用方法。描述重复了标题内容,这表明文件的主要目的是提供关于Oracle游标的实例代码,供学习和参考。 ### 标签 标签“Oracle...

    Oracle游标使用大全

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

    oracle游标优化

    ### Oracle游标优化 在Oracle数据库管理中,游标是一种重要的机制,用于处理查询结果集。游标可以被看作是存储查询结果的一种临时区域,它允许用户通过循环逐行处理这些结果。游标不仅可以提高应用程序的灵活性,还...

    Oracle游标的使用实例详解

    Oracle游标是数据库管理系统中的一种重要机制,它允许应用程序按需逐行处理查询结果集,而不是一次性处理所有数据。游标对于交互式和事务性的应用尤其有用,因为它们可以控制数据流并根据需要进行交互。 首先,让...

    oracle 的函数、存储过程、游标、简单实例

    本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...

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

    SQL中的游标与Oracle类似,但语法稍有不同。在SQL Server或MySQL中,我们可以使用DECLARE、OPEN、FETCH和CLOSE语句来管理游标。以下是一个SQL Server的例子: ```sql DECLARE @var1 datatype1, @var2 datatype2; ...

    oracle游标的用法

    oracle游标的用法,比较通俗易懂的讲解游标用法,有实例

    oracle游标实例

    Oracle游标是数据库管理系统中处理查询结果的一种方法,它允许我们逐行处理数据,而不仅仅是一次性获取所有结果。在Oracle中,游标分为隐式游标和显式游标。 ### 隐式游标 Oracle数据库在执行DML(插入、删除、更新...

    详解Oracle游标的简易用法

    本篇将详细解释Oracle游标的简易用法,并通过实例代码来演示如何使用。 首先,游标定义了一个SQL查询的结果集,但并不立即执行该查询。在Oracle中,游标由`DECLARE`语句定义,可以包括变量、条件等。例如: ```sql...

    Oracle存储过程实例使用显示游标

    总结来说,"Oracle存储过程实例使用显示游标"是关于如何在存储过程中利用游标进行数据迭代和操作的教程,适合初学者学习。通过这种方式,我们可以高效地处理大量数据,同时结合Function进行更复杂的逻辑处理。记住,...

    Oracle游标使用参考语句实例解析

    Oracle游标是数据库管理系统中的一种重要机制,它允许程序员按需逐行处理查询结果集,而不是一次性加载所有数据。游标对于处理大量数据时的效率和控制流程具有显著优势,尤其是在需要对每条记录进行单独操作或者需要...

    Orcle游标实例.txt

    ### Oracle 游标实例解析及应用 #### 一、Oracle游标概述 在Oracle数据库中,游标(Cursor)是一种数据库对象,它允许程序能够逐行处理查询结果集中的数据。与直接执行SQL语句获取整个结果集不同,游标可以逐行...

    job 存储过程 视图 游标结合实例

    以上就是Oracle Job、存储过程、视图和游标在实际应用中的基本概念和结合实例,它们共同构成了数据库管理和自动化操作的重要部分。理解并熟练掌握这些工具,能显著提升数据库的管理和维护效率。

    Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本

    Oracle PL/SQL是一种强大的编程语言,它将关系数据库的强大功能与结构化编程的优点结合在一起,是Oracle数据库系统中不可或缺的一部分。在"Oracle PL/SQL 实例精解(第4版涵盖Oracle 11g)+源码脚本"中,读者可以深入...

    oracle pl sql 实例精解 源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与Procedural Language的控制结构,被广泛用于Oracle数据库的开发和管理。本资料集是"Oracle PL/SQL实例精解",提供了丰富的源代码示例,帮助读者深入...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...

    sql 游标遍历 实例

    在本实例中,我们将探讨如何使用SQL游标来遍历数据并执行相关操作。 首先,让我们理解什么是游标。游标可以视为一个指针,它在查询结果集上移动,允许你逐行访问数据。在大多数关系型数据库管理系统(如MySQL、SQL ...

Global site tag (gtag.js) - Google Analytics