sql游标

游标
-- 声明游标;CURSOR cursor_name IS select_statement
--For 循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用for循环来使用这个游标
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.empno);
end loop;
end;

这个就是典型的游标例子,
select empno,ename,job,sal
from emp
where job='MANAGER'
查询出来的是个结果集合,游标就一条一条的读取出来

 用自己的话啊

就是循环对一组数据进行操作的时候的一种手段

ps:游标的效率向来是受争议的,建议1000条以上的数据循环操作时尽量避免使用

下面是我在项目中利用游标写过的一个存储。

ALTER procedure [dbo].[cmdDoctorWeeklyUploadTemplate]
@_doctorId int --传入参数
as
set nocount on
delete from DoctorWeeklyUploadConfig where doctorId=@_doctorId
declare @weekDay int,
@serialNo int  --声明变量
declare DoctorWeekly_cursor cursor for   --声明游标,select查询出的结果存入游标中
select weekDay,serialNo from dbo.DoctorWeeklyUploadConfig where doctorId=0

open DoctorWeekly_cursor  --打开游标

--取下一条数据,因为游标打开以后,默认的指针是在第一条前面的
--这个语句的意思是把第一条记录中的数据拿出来,并赋值给之前声明的变量
fetch from DoctorWeekly_cursor into @weekDay,@serialNo

--如果取数据成功,则.... 
--这里的while是一个循环,用来遍历整个游标
while @@fetch_status=0
begin  --下面就开始写处理过程
insert into DoctorWeeklyUploadConfig values(@_doctorId,@weekDay,@serialNo)

--取下一条

fetch next from DoctorWeekly_cursor into @weekDay,@serialNo
end
--关闭并释放游标
close DoctorWeekly_cursor
deallocate DoctorWeekly_cursor
set nocount off

转载于:https://www.cnblogs.com/soloone/archive/2013/01/14/2859971.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值