重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

oracle如何存储游标 oracle存储过程定义游标

Oracle游标使用总结

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

创新互联为客户提供专业的网站设计制作、成都做网站、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、成都手机网站制作等网站方面业务。

显示游标(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存储过程游标for循环怎么写

--数字

FOR loop index IN [REVERSE] lowest number .. highest number

LOOP

executable statement(s)

END LOOP;

具体情形:

FOR loop_counter IN 1 .. 10

LOOP

... executable statements ...

END LOOP;

--游标:

DECLARE

CURSOR occupancy_cur IS 

SELECT pet_id, room_number

FROM occupancy WHERE occupied_dt = SYSDATE;

BEGIN

FOR occupancy_rec IN occupancy_cur

LOOP

update_bill (occupancy_rec.pet_id, occupancy_rec.room_number);

END LOOP;

END;

oracle存储过程游标问题

--打开游标并提取后面SQL的第一行数据放到游标中 这里就是打开游标

open for 是隐式游标的写法 不建议使用 这种游标好象不需要关闭 具体你自己测试下 而且少了expection 处理

fetch mycur into yang_02;

--循环插入数据

多余了 可以不要 前面有fetch了如果还有这里的话 就只能插入奇数行

其他没什么问题了 还有你这个过程用ref cursor是浪费 没必要用 用简单的显示游标更好点

oracle 存储过程 游标

你游标木有定义把,一般都是这样写的.还有你的列名是a1,前面加了个限定t是把?如果加限定的话,那在from后面的数据来源表,就需要标明那个表是t.

vstr1 varchar2(100)

vstr2 varchar2(100)

declare r_cur cursor for select t.a1,t.a2 from abc t

open r_cur

fetch from r_cur into vstr1,vstr2

后面就是

while @@FETCH_STATUS = 0 .....等等不写了。

反正游标头我都是那么写,没有问题。


文章标题:oracle如何存储游标 oracle存储过程定义游标
文章网址:http://cqcxhl.com/article/hjshhg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP