Oracle 游标使用总结

如题所述

第1个回答  2022-10-30
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语句的执行结果决定是否需要插入新记录 lishixinzhi/Article/program/Oracle/201404/30540

相似回答