当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle游标使用总结
发布时间:2011/7/12 8:47:05 来源:城市学习网 编辑:ziteng

  显示游标(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)。使用IFELSE代替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;

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved