oracle怎么取游标 oracle游标是什么

oracle存储过程中打开游标有几种方法?用open直接打开?

两种方法\x0d\x0a1.声明游标时写好SELECT语句,如\x0d\x0aCURSOR r_cur1 IS select *** from tableName where 条件;\x0d\x0a使用时\x0d\x0a OPEN r_cur1;\x0d\x0a LOOP\x0d\x0a FETCH *** INTO variable;\x0d\x0a EXIT WHEN r_cur1%NOTFOUND OR r_cur1%NOTFOUND IS NULL;\x0d\x0a。。。\x0d\x0a2.声明游标\x0d\x0accc sys_refcursor;\x0d\x0a使用时\x0d\x0a open ccc for select dept_code,dept_name from comm.dept_dict; \x0d\x0a loop\x0d\x0a fetch ccc into aa,bb;\x0d\x0a exit when ccc%notfound;\x0d\x0a 。。。\x0d\x0a end loop;\x0d\x0a close ccc;

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站建设、成都外贸网站建设、敖汉网络推广、微信小程序定制开发、敖汉网络营销、敖汉企业策划、敖汉品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供敖汉建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

如何使用Oracle的游标?

Oracle中的游标分为显示游标和隐式游标。

显示游标:

显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;显示游标的操作:打开游标、操作游标、关闭游标;

隐式游标:

隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它。

Oracle游标提取相关的数据的语法介绍

本文主要介绍的是Oracle游标提取相关的数据的实际操作方案 首先我们要从Oracle游标中得到一行相关的数据 我个人提议你使用FETCH命令 当每一次提取数据后 Oracle游标都指向结果集的下一行 语法如下

FETCH cursor_name INTO variable[ variable ]

对于SELECT定义的Oracle游标的每一列 FETCH变量列表都应该有一个变量与之相对应 变量的类型也要相同

SET SERVERIUTPUT ON

DECLARE

v_ename EMP ENAME%TYPE;

v_salary EMP SALARY%TYPE;

CURSOR c_emp IS SELECT ename salary FROM emp;

BEGIN

OPEN c_emp;

FETCH c_emp INTO v_ename v_salary;

DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename

|| is || v_salary);

FETCH c_emp INTO v_ename v_salary;

DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename

|| is || v_salary);

FETCH c_emp INTO v_ename v_salary;

DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename

|| is || v_salary);

CLOSE c_emp;

END

这段代码无疑是非常麻烦的 如果有多行返回结果 可以使用循环并用Oracle游标属性为结束循环的条件 以这种方式提取数据 程序的可读性和简洁性都大为提高 下面我们使用循环重新写上面的程序

SET SERVERIUTPUT ON

DECLARE

v_ename EMP ENAME%TYPE;

v_salary EMP SALARY%TYPE;

CURSOR c_emp IS SELECT ename salary FROM emp;

BEGIN

OPEN c_emp;

LOOP

FETCH c_emp INTO v_ename v_salary;

EXIT WHEN c_emp%NOTFOUND;

DBMS_OUTPUT PUT_LINE( Salary of Employee || v_ename

|| is || v_salary);

END

lishixinzhi/Article/program/Oracle/201311/18889

Oracle游标使用总结

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


本文标题:oracle怎么取游标 oracle游标是什么
链接分享:http://ybzwz.com/article/hjpddj.html