Oracle游标使用总结

 我来答
新科技17
2022-10-12 · TA获得超过5904个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:74.9万
展开全部

  Oracle游标分为显示游标和隐式游标

  显示游标(Explicit Cursor):在PL/SQL程序中定义的 用于查询的游标称作显示游标

  隐式游标(Implicit Cursor):是指非PL/SQL程序中定义的 而且是在PL/SQL中使用UPDATE/DELETE语句时 Oracle系统自动分配的游标

   一 显示游标

   使用步骤

  ( )定义 ( )打开 ( )使用 ( )关闭

   使用演示

  首先创建测试用表STUDENT 脚本如下

  ( ) 使用WHILE循环处理游标

  create or replace PROCEDURE PROC_STU AS

  BEGIN

   显示游标使用 使用while循环

  declare

   定义游标 名称为cur_stu

  cursor cur_stu is

  select stuno stuname from student order by stuno;

   定义变量 存放游标取出的数据

  v_stuno varchar( );

  v_stuname varchar( );

  begin

   打开游标cur_stu

  open cur_stu;

   将游标的当前行取出存放到变量中

  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; 关闭游标

  end;

  END PROC_STU ;

  ( ) 使用IF ELSE代替WHILE循环处理游标

  create or replace PROCEDURE PROC_STU AS

  BEGIN

   显示游标使用 使用if判断

  declare

   定义游标 名称为cur_stu

  cursor cur_stu is

  select stuno stuname from student order by stuno;

   定义变量 存放游标取出的数据

  v_stuno varchar( );

  v_stuname varchar( );

  begin

   打开游标cur_stu

  open cur_stu;

   将游标的当前行取出存放到变量中

  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; 关闭游标

  end;

  END PROC_STU ;

  ( ) 使用FOR循环处理游标

  create or replace PROCEDURE PROC_STU 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_STU ;

  ( ) 常用的使用EXIT WHEN处理游标

  create or replace

  PROCEDURE PROC_STU _ AS

  BEGIN

   显示游标使用 使用exit when循环

  declare

   定义游标 名称为cur_stu

  cursor cur_stu is

  select stuno stuname from student order by stuno;

   定义变量 存放游标取出的数据

  v_stuno varchar( );

  v_stuname varchar( );

  begin

   打开游标cur_stu

  open cur_stu;

  loop

   将游标的当前行取出存放到变量中

  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; 关闭游标

  end;

  END PROC_STU _ ;

   二 隐式游标

   使用演示

  create or replace PROCEDURE PROC_STU AS

  BEGIN

   隐式游标使用

  update student set stuname= 张燕广 where stuno= ;

   如果更新没有匹配则插入一条新记录

  if SQL%NOTFOUND then

  insert into student(STUNO STUNAME AGE GENDER)

  values( 张燕广 男 );

  end if;

  END PROC_STU ;

   说明

  所有的SQL语句在上下文区内部都是可执行的 因为都有一个游标指向上下文区 此游标就是

  SQL游标 与现实游标不同的是 SQL游标在PL/SQL中不需要打开和关闭 而是在执行UPDATE

  DELETE是自动打开和关闭

  上面例子中就是通过SQL%NOTFOUND游标属性判断UPDATE语句的执行结果决定是否需要插入新记录 CREATE TABLE STUDENT (

   STUNAME VARCHAR ( BYTE)

   STUNO VARCHAR ( BYTE)

   AGE NUMBER

   GENDER VARCHAR ( CHAR)

lishixinzhi/Article/program/Oracle/201311/17531

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仁科信息
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部... 点击进入详情页
本回答由仁科信息提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式