oracle 游标循环赋值_说说 SQL 游标好了

说说 SQL 游标好了

其实跟数据库交互不只有增删改查。增删改查是基础。如果连这都掌握不明白,那只能说这个程序员不合格。本文说说 SQL 游标。

可以把游标理解成是指针。内存中都指针指向的是一个十六进制的地址。可以粗浅地认为,指针指向内存中的一个个小格子。游标指向一行数据。

许多大型关系型数据库都支持 SQL 游标。比如SQL Server,Orancle,Mysql。其中 SQL Server 中的游标如此使用。

-- 声明游标
declare AsmaCurrentCursor cursor scroll 
for select EndTime from view_result where ChannelName = 'AsamaCurrent'

-- 打开游标
open AsmaCurrentCursor

-- 声明变量
declare @EndTime datetime, @OldEndTime datetime

-- 移动游标取出结果中的第一行数据
fetch first from AsmaCurrentCursor into @EndTime
set @OldEndTime = @EndTime

-- 循环执行操作
-- 移动游标未发生异常时循环。换句话说,若游标移动时发生异常,就跳出循环
while @@FETCH_STATUS = 0
begin  

-- 移动游标,并给变量赋值
 fetch next from AsmaCurrentCursor into @EndTime

-- 其它操作
 update view_result set EndTime = DATEADD(MINUTE, 1, @OldEndTime) where Current of AsmaCurrentCursor 
 set @OldEndTime = DATEADD(MINUTE, 1, @OldEndTime)

end

-- 关闭游标
close AsmaCurrentCursor

-- 释放掉游标资源
deallocate AsmaCurrentCursor

上面 SQL 的作用就是以 EndTime 列首行记录的时间值为参考,逐行把日期增加一分钟。

8bd6944372f1a537954002571b868448.png

如果你仔细体会上述 SQL,你就已经掌握了游标。

写到这里,如果你还不了解 SQL 游标,没关系。因为我写这篇文章目的也不是教你学这个。我要说的是:

1、SQL 并不只有增删改查,可玩的东西挺多的。

2、能在 SQL 里实现的东西,就不要让你的程序去做。尽量让程序获取最终结果,而不是再计算。

3、使用游标会降低查询效率,如无必要,不要使用游标。

这就是我的一点经验。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值