Oracle 游标使用总结

 更新时间:2009年10月01日 01:34:38   作者:  
游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用CURSOR与SELECT一起对表或者视图中的数据进行查询并逐行读取。
Oracle游标分为显示游标和隐式游标。
显示游标(Explicit Cursor):在PL/SQL程序中定义的、用于查询的游标称作显示游标。
隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的、而且是在PL/SQL中使用UPDATE/DELETE语句时,Oracle系统自动分配的游标。
一.显示游标
1.使用步骤
(1)定义 (2)打开 (3)使用 (4)关闭
2.使用演示
首先创建测试用表STUDENT,脚本如下:
复制代码 代码如下:

CREATE TABLE "STUDENT" (
"STUNAME" VARCHAR2(10 BYTE),
"STUNO" VARCHAR2(4 BYTE),
"AGE" NUMBER,
"GENDER" VARCHAR2(2 CHAR)
)

(1).使用WHILE循环处理游标
create or replace PROCEDURE PROC_STU1 AS
BEGIN
--显示游标使用,使用while循环
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
while cur_stu%found --游标所指还有数据行,则继续循环
loop
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--继续将游标所指的当前行取出放到变量中
fetch cur_stu into v_stuno,v_stuname;
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU1;
(2).使用IF..ELSE代替WHILE循环处理游标
create or replace PROCEDURE PROC_STU2 AS
BEGIN
--显示游标使用,使用if判断
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
loop
if cur_stu%found then --如果游标cur_stu所指还有数据行
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
--继续将游标所指的当前行取出放到变量中
fetch cur_stu into v_stuno,v_stuname;
else
exit;
end if;
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU2;
(3).使用FOR循环处理游标
create or replace PROCEDURE PROC_STU3 AS
BEGIN
--显示游标使用,使用for循环
declare
--定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
begin
for stu in cur_stu
loop
dbms_output.PUT_LINE(stu.stuno||'->'||stu.stuname);
--循环做隐含检查 %notfound
end loop;
--自动关闭游标
end;
END PROC_STU3;
(4).常用的使用EXIT WHEN处理游标
create or replace
PROCEDURE PROC_STU1_1 AS
BEGIN
--显示游标使用,使用exit when循环
declare
--1.定义游标,名称为cur_stu
cursor cur_stu is
select stuno,stuname from student order by stuno;
--定义变量,存放游标取出的数据
v_stuno varchar(4);
v_stuname varchar(20);
begin
--2.打开游标cur_stu
open cur_stu;
loop
--3.将游标的当前行取出存放到变量中
fetch cur_stu into v_stuno,v_stuname;
exit when cur_stu%notfound; --游标所指还有数据行,则继续循环
--打印结果
dbms_output.PUT_LINE(v_stuno||'->'||v_stuname);
end loop;
close cur_stu; --4.关闭游标
end;
END PROC_STU1_1;
二.隐式游标
1.使用演示
create or replace PROCEDURE PROC_STU4 AS
BEGIN
--隐式游标使用
update student set stuname='张燕广' where stuno='1104';
--如果更新没有匹配则插入一条新记录
if SQL%NOTFOUND then
insert into student(STUNO,STUNAME,AGE,GENDER)
values('1104','张燕广',18,'男');
end if;
END PROC_STU4;
2.说明
所有的SQL语句在上下文区内部都是可执行的,因为都有一个游标指向上下文区,此游标就是
SQL游标,与现实游标不同的是,SQL游标在PL/SQL中不需要打开和关闭,而是在执行UPDATE、
DELETE是自动打开和关闭。
上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录。

相关文章

  • PL/SQL Developer连接64位的Oracle图文教程

    PL/SQL Developer连接64位的Oracle图文教程

    这篇文章主要为大家详细介绍了PL/SQL Developer连接64位的Oracle图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Oracle dbf文件移动的方法

    Oracle dbf文件移动的方法

    这篇文章主要介绍了Oracle dbf文件移动的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • oracle创建新用户以及用户权限配置、查询语句

    oracle创建新用户以及用户权限配置、查询语句

    在Oracle数据库中要创建一个用户并仅赋予查询权限,你可以按照以下步骤进行操作,这篇文章主要给大家介绍了关于oracle创建新用户以及用户权限配置、查询语句的相关资料,需要的朋友可以参考下
    2024-03-03
  • Mac上Oracle数据库的安装及过程中一些问题的解决

    Mac上Oracle数据库的安装及过程中一些问题的解决

    这篇文章主要介绍了Mac上安装Oracle数据库的安装及过程中一些问题的解决,需要的朋友可以参考下
    2015-12-12
  • 使用oracle修改表字段长度的步骤

    使用oracle修改表字段长度的步骤

    这篇文章主要介绍了如何使用oracle修改表字段长度,本文仅仅简单介绍了如何使用oracle修改表字段长度,而oracle提供了大量能使我们快速便捷地处理数据的函数和方法,需要的朋友可以参考下
    2023-07-07
  • Oracle时间日期操作方法小结

    Oracle时间日期操作方法小结

    Oracle时间日期操作方法小结,需要的朋友可以参考下。
    2010-11-11
  • Oracle中使用Rownum分页详细例子

    Oracle中使用Rownum分页详细例子

    这篇文章主要介绍了Oracle中使用Rownum分页详细例子,本文将分别展示使用rownum伪列和row_number()分析函数来完成Oracle数据分页操作的具体使用方法,需要的朋友可以参考下
    2014-07-07
  • oracle19c卸载教程的超详细教程

    oracle19c卸载教程的超详细教程

    Oracle安装失败,如何卸载呢?下面这篇文章主要给大家介绍了关于oracle19c卸载教程的超详细教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Oracle9iPL/SQL编程的经验小结

    Oracle9iPL/SQL编程的经验小结

    Oracle9iPL/SQL编程的经验小结...
    2007-03-03
  • 浅谈oracle中单引号转义

    浅谈oracle中单引号转义

    这篇文章主要介绍了浅谈oracle中单引号转义的香瓜内容,涉及单引号的作用以及其具体用法,具有一定参考价值,需要的朋友可以参考下。
    2017-09-09

最新评论