oracle创建多个游标,Oracle——游标的创建和使用

游标

SQL语言是面向集合的,是对指定列的操作。如果要对列中的指定行进行操作,就必须使用游标。

当在PL/SQL块中执行查询语句(SELECT) 和数据操纵语句(DML) 时,Oracle会为其分配一个上下文区(Context Area)

游标是指向上下文区的指针,它为应用提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法

显式游标

游标分为显式游标和隐含游标两种

隐含游标用于处理SELECT INTO和DML语句

显式游标则用于处理S ELECT语句返回的多行数据

使用显式游标

定义游标

CURSOR cursor_ name IS select statement;

打开游标

OPEN cursor name;

提取数据

FETCH cursor_name INTO variable1,variable...;

FETCH cursor_name bulk collect into collect1..;

关闭游标

CLOSE cursor name;

代码:

--创建游标

declare

cursor 游标名称 is select * from表名;

变量名 表名%rowtype;begin

open 游标名;--打开游标

loopfetch 游标名 into 变量名;--提取游标

exit when 游标名%notfound;

dbms_output.put_line(变量名.列名);endloop;close 游标名;--关闭游标

end;

显示游标属性

显式游标属性用于返回显式游标的执行信息

游标属性使用格式为: 游标名+ 属性名

%ISOPEN

用于确定游标是否已经打开。如果游标已经打开,则返回值为TRUE; 否则返回FALSE

%FOUND

检查是否从结果集中提取到数据。如果提取到数据,则返回值为TRUE; 否则返回FALSE

%NOTFOUND

与%FOUND属性恰好相反,如果提取到数据,则返回值为FALSE; 否则返回TRUE

%ROWCOUNT

返回到当前行为止已经提取到的实际行数

参数游标

参数游标是指带有参数的游标。在定义了参数游标之后,使用不同参数值多次打开游标可以生成不同的结果集。

代码:

--参数游标

declare

cursor cursor_wxn(x_empno number)--定义参数(形参)

is

select * from emp where empno=x_empno;

v_name emp%rowtype;begin

open cursor_wxn(7369);--(实参)

loopfetch cursor_wxn intov_name;exit when cursor_wxn%notfound;

dbms_output.put_line(v_name.ename);endloop;closecursor_wxn;end;

游标for循环

游标for循环是在pl/sql块中使用游标的最简单方式,它可以简化对游标的处理。当使用游标for循环时,oracle会隐含的打开游标,提取游标数据并关闭游标。

代码:

--游标for循环

declarev_name emp%rowtype;cursorcursor_wxnis

select * fromemp;begin

for v_name incursor_wxn loop

dbms_output.put_line(v_name.ename);endloop;end;

上面代码中无须进行取值和关闭的操作,游标for循环可以自己进行。

下面还有一个更为简单的游标for循环,参考上面的代码进行读阅:

--简单for

begin

for v_name in (select * fromemp) loop

dbms_output.put_line(v_name.ename);endloop;end;

使用游标变量

484f92664298bedfda509756d6502e48.png

代码实例:

declaretype youbiao_bianliangis ref cursor;--变量类型

cursor_varisble youbiao_bianliang;--定义游标类型的变量

v_name emp%rowtype;--变量

begin

opencursor_varisblefor select * from emp where empno=7788;

loopfetch cursor_varisble intov_name;exit when cursor_varisble%notfound;

dbms_output.put_line(v_name.ename);endloop;closecursor_varisble;end;

隐含游标

作用:用属性进行一些判断(一种判断方式)

含义:当执行一条DML语句或者SELECT...INTO语句时,都会创建一个隐含游标。

隐含游标的名称是SQL,不能对SQL游标显示执行OPEN、FETCH和CLOSE语句。

Oracle隐式地打开、提取,并总是自动地关闭SQL游标。

属性:

SQL%FOUND:只有DML语句影响一行或多行时,SQL%FOUND属性才返回true。

SQL%NOTDOUND:如果DNL语句没有影响行数,此属性将返回false。

SQL%ROWCOUNT:返回DML影响的行数,如果DML语句没有影响行则返回0.

SQL%ISOPEN:此属性用于判断SQL游标是否已经打开。在执行SQL语句之后,Oracle自动关闭SQL游标,所以隐含游标的SQL%ISOPEN属性始终为false。

简单示例1:

--隐含游标

begin

delete from emp where empno=1;if sql%notfound thendbms_output.put_line('找不到记录');elsedbms_output.put_line('记录');end if;end;

示例2:

declareanumber:=1;begin

delete from emp where empno=a;if sql%notfound thendbms_output.put_line('没有改变');elsedbms_output.put_line('改变');end if;end;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值