oracle 遊標迴圈賦值_說說 SQL 遊標好了
阿新 • • 發佈:2020-12-13
技術標籤: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 列首行記錄的時間值為參考,逐行把日期增加一分鐘。
如果你仔細體會上述 SQL,你就已經掌握了遊標。
寫到這裡,如果你還不瞭解 SQL 遊標,沒關係。因為我寫這篇文章目的也不是教你學這個。我要說的是:
1、SQL 並不只有增刪改查,可玩的東西挺多的。
2、能在 SQL 裡實現的東西,就不要讓你的程式去做。儘量讓程式獲取最終結果,而不是再計算。
3、使用遊標會降低查詢效率,如無必要,不要使用遊標。
這就是我的一點經驗。