PL/SQL Cursor游标的基本使用

Cursor:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。

Cursor类型包含三种: 静态游标:分为显式(explicit)游标和隐式(implicit)游标;REF游标:是一种引用类型,类似于指针。

显式游标

1) 显式Cursor的属性包含: 
游标的属性   返回值类型   意义  
%ROWCOUNT   整型  获得FETCH语句返回的数据行数  
%FOUND  布尔型 最近的FETCH语句返回一行数据则为真,否则为假  
%NOTFOUND   布尔型 与%FOUND属性返回值相反  
%ISOPEN 布尔型 游标已经打开时值为真,否则为假  

2) 对于显式游标的运用分为四个步骤: 
a 定义游标---Cursor  [Cursor Name]  IS; 
b 打开游标---Open  [Cursor Name]; 
c  操作数据---Fetch  [Cursor name] 
d  关闭游标---Close [Cursor Name] 


游标一般格式:
DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
WHILE @@FETCH_STATUS=0
        BEGIN
                  SQL语句执行过程... ...
                  FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
        END
CLOSE 游标名称
DEALLOCATE 游标名称 (删除游标)


cursor 游标示例1
set serveroutput on;
declare
-- 声明变量为数据表列的类型
v_empno emp.empno%type; 
--通过%type取emp表的empno的类型
v_ename emp.ename%type;
--声明一个游标对应一个查询
cursor v_emp_cursor 
  is select empno,ename 
     from emp order by ename;
begin
-- 从游标中获取数据
open v_emp_cursor;
loop
--从游标中取出一行存入变量
--取出以后,游标下移
fetch v_emp_cursor 
   into v_empno, v_ename;
--退出条件
exit when v_emp_cursor%notfound;
--打印输出
dbms_output
  .put_line(v_empno||','||v_ename);
end loop;
close v_emp_cursor;
end;

Cursor示例2
table1结构如下
id    int
name  varchar(50)

declare @id int
declare @name varchar(50)
declare cursor1 cursor for         --定义游标cursor1
select * from table1               --使用游标的对象(跟据需要填入select文)
open cursor1                       --打开游标

fetch next from cursor1 into @id,@name  --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中

while @@fetch_status=0           --判断是否成功获取数据
begin
update table1 set name=name+'1'
where id=@id                           --进行相应处理(跟据需要填入SQL文)

fetch next from cursor1 into @id,@name  --将游标向下移1行
end

close cursor1                   --关闭游标
deallocate cursor1


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值