1. 程式人生 > 其它 >oracle 遊標迴圈賦值_說說 SQL 遊標好了

oracle 遊標迴圈賦值_說說 SQL 遊標好了

技術標籤:oracle 遊標迴圈賦值sql 遊標sqlserver 遊標sql增刪改查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、使用遊標會降低查詢效率,如無必要,不要使用遊標。

這就是我的一點經驗。