在oracle中游标的操作,Oracle中的游标操作

游标是Oracle系统在内存中开辟的一个工作区,在其中存放SELECT语句返回的查询结果

<1>游标操作的过程

(1) 定义游标

(2)打开游标

(3)游标的操作(移动,读取数据)

(4)关闭游标

注释:-- 游标的定义格式:cursor cusor_name is select语句

-- 游标的打开: open 游标名

-- 游标读取数据: fetch 游标名 into 变量1,变量2……(这里可以是普通变量,也可以是记录类型的变量)

-- 关闭游标:   close 游标名

--游标只能向后移动,不能返回。

<2>游标操作举例

Declare

Row person%rowtype;--定义了一个记录类型的变量

Increment number(4);--定义了一个普通变量

Cursor cursor_person is select * from person; -定义游标变量

I number(2);--定义普通变量

Begin

Select count(*) into I from person;--i变量保存person表中的记录总数

Open cursor_person;        ----打开游标

Loop

Fetch cursor_person into row;      ----取出游标中的数据放到记录类型的变量中

If row.id=2 then

Increment:=1;

Elseif row.id=3 then

Increment:=2;

End if;

Update person set age=age+ Increment where name=row.name;

I:=i-1;

Exit when i=0;

End loop;

Close cursor_person;        ----关闭游标

End;

/

注解:将表中号码是2的人年龄加1,号码是3的人年龄加2.

<3>游标的属性:

----%ISOPEN:该属性判断游标是否已经打开,若已经打开,则返回值值true,否则返回false

------%FOUND若最近一次fetch操作结果存在,那么就返回true

------%NOTFOUND同%FOUND相反

------%ROWCOUNT返回游标操作过的记录总数

上面的举例可以改写为:

Declare

Row person%rowtype;--定义了一个记录类型的变量

Increment number(4);--定义了一个普通变量

Cursor cursor_person is select * from person; -定义游标变量

Begin

Open cursor_person;        ----打开游标

Loop

Fetch cursor_person into row;      ----取出游标中的数据放到记录类型的变量中

Exit when cursor_person%NOTFOUND;

If row.id=2 then

Increment:=1;

Elseif row.id=3 then

Increment:=2;

End if;

Update person set age=age+ Increment where name=row.name;

End loop;

Close cursor_person;        ----关闭游标

End;

/

<4>for循环在游标操作中的应用

基本格式:

For 变量名(此变量名无需定义) in 游标名 loop

循环体部分

End loop;

说明:for循环会自动的打开和关闭游标

下面是上例子在for循环中的使用情况:

Declare

Increment number(4);--定义了一个普通变量

Cursor cursor_person is select * from person; -定义游标变量

Begin

For row in cursor_person loop

If row.id=2 then

Increment:=1;

Elseif row.id=3 then

Increment:=2;

End if;

Update person set age=age+ Increment where name=row.name;

End loop;       ----关闭游标

End;

/

<5>带参数的游标操作

定义的格式:

Cursor cursor_name(variable1 type, variable2 type …………….) is selectStatement

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值