资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

oracle如何关闭游标 oracle游标删除数据

Oracle游标使用总结

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

创新互联是专业的黟县网站建设公司,黟县接单;提供网站制作、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行黟县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

显示游标(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

如何打开和关闭Oracle游标

--Oracle PL/SQL

declare

--定义游标

cursor cur_test is

select * from emp;

v_emp emp%rowtype;

begin

--打开游标

open cur_test;

loop

--获取游标值

fetch cur_test

into v_emp;

exit when cur_test%notfound;--属性为是否提取数据成功,不成功则TRUE

dbms_output.put_line(v_emp.empno || '_' || v_emp.ename);

end loop;

--关闭游标

close cur_test;

end;

oracle如何关闭游标?

1. 用open打开的,用close关闭\x0d\x0adeclare\x0d\x0acursor mycursor is\x0d\x0aselect * from emp for update;\x0d\x0amyrecord emp%rowtype;\x0d\x0abegin\x0d\x0aopen mycursor;\x0d\x0aloop\x0d\x0afetch mycursor into myrecord;\x0d\x0aexit when mycursor%notfound;\x0d\x0aif (myrecord.sal=2000) then\x0d\x0aupdate emp\x0d\x0aset sal=2001\x0d\x0awhere current of mycursor;\x0d\x0aend if;\x0d\x0aend loop;\x0d\x0aclose mycursor;\x0d\x0acommit;\x0d\x0aend;\x0d\x0a2. 用for 循环的,循环完了就自己关了\x0d\x0adeclare\x0d\x0acursor mycursor is\x0d\x0aselect * from emp;\x0d\x0abegin\x0d\x0afor i in mycursor\x0d\x0aloop\x0d\x0adbms_output.put_line(i.job);\x0d\x0aend loop;\x0d\x0aend;


本文题目:oracle如何关闭游标 oracle游标删除数据
浏览地址:http://cdkjz.cn/article/hpdogd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220