SQL Server 數據庫的維護(四)__游標(cursor)

--維護數據庫--


?


?

--游標(cursor)--

--概述

注:使用select語句查詢結果的結果集是一個整體,如果想每次處理一行或一部分行數據,游標可以提供這種處理機制。可以將游標理解為指針指針指向哪條記錄,哪條記錄即是被操作記錄

游標處理結果集的方式:

1)允許定位在結果集的指定位置行

2)從結果集的當前位置檢索一行或一部分行記錄

3)支持對結果集當前位置做數據修改、刪除等操作

?

--使用游標

注:使用游標定位和操作數據記錄的一般步驟為:聲明游標、打開游標、抽取數據、關閉游標和釋放游標

--聲明游標?(declare … cursor)

注:聲明游標跟聲明變量相似,用declare命令

declare 游標名 cursor --declare表示聲明游標名,cursor表示游標含義

[forward_only] [scroll] [read_only] [dynamic] --可選項forward_only表示游標為只進游標。可選項read_only定義游標為只讀游標。可選項scroll表示可以使用所有抽取數據的選項。可選項dynamic表示游標結果集中的數據可以修改。

for select語句 [for update [of 字段名 [ , ...] ] ] --select語句指能夠查詢到結果集的查詢語句,其中不能包含compute、compute by和into語句。要對結果集中做update修改操作時,可以使用of字段名來指明允許被修改的字段名,如果不使用of指定字段名,則所有字段都修改。

?

--打開游標

open 游標名 --open命令表示打開。“游標名”必須是已定義的、且沒有在使用的游標。剛打開游標,指針指向結果集中第一條記錄之前。

全局標量@@error可以判斷游標是否打開成功,如果返回0只則說明成功,否則失敗。

全局變量@@cursor_rows可以返回被打開的游標中記錄個數。

?

--抽取游標

fetch [first | prior | next | last | absolute {n|@變量} | relative {n|@變量} ] --fetch命令表示抽取數據,一次只能抽取一條記錄

[from] 游標名 [into @變量名 [, ...] ] --into@變量名,...把抽取出的字段值賦值給指定變量,然后使用。

--first命令用來抽取結果集中的第一條記錄,并定位指針。

--prior命令用來抽取當前記錄的前一條記錄,并定位指針。如果當前記錄為結果集中的第一條記錄,prior命令則使指針上移至第一條記錄上方,并不會抽取結果。

--next命令用來抽取當前記錄的后一條記錄,并定位指針。新打開的數據庫使用next抽取出結果集中第一行記錄。如果結果集中最后一行記錄為當前記錄,next則使指針指向最后一條記錄下方,并不會抽取出結果。

--last命令用來抽取結果集中的最后一條記錄,并定位指針。

--absolute {n|@變量},當n(或@變量)為正數時,返回結果集中從頭開始的第n(或@變量)條記錄,并定位指針當n(或@變量)為負數時,返回結果集中從末尾開始的第n(或@變量)條記錄,并定位指針。

--relative {n|@變量},當n(或@變量)為正數時,返回結果集中從當前行開始向下的第n(或@變量)條記錄,并定位指針;當n(或@變量)為負數時,返回結果集中從末尾開始的第n(或@變量)條記錄,并定位指針。

--可以使用全局變量@@fetch_status的值來判斷fetch命令是否抽取到數據值為0表示抽取到記錄值為-1表示指針指向結果集最后一條記錄下方值為-2表示抽取操作存在問題

?

--關閉游標

close 游標名 --游標關閉后不能使用fetch命令抽取游標中的記錄,除非再次使用open命令(打開)重新打開。

?

--釋放游標

deallocate 游標名 --被釋放后的游標不能再使用open命令打開使用,除非使用declare命令(聲明)重新定義。

例:(***下面是一個幫助理解的案例***)(逐條查看“商品管理數據庫”的“銷售信息表”中2012年12月20日的銷售信息)use 商品管理數據庫goset nocount on--聲明游標declare c_銷售表_日期 cursorforselect 商品信息表.商品編號,商品信息表.商品名稱,銷售金額 from 商品信息表,銷售信息表 where 商品信息表.商品編號=銷售信息表.商品編號and 銷售日期='2012-12-20'--打開游標open c_銷售表_日期--抽取數據beginprint '=====2012年12月20日銷售信息====='declare @pdno nchar(8),@pdname nvarchar(10), @salemoney decimal(17,2)--抽取第一條記錄,并將抽取到的變量賦值給相應變量fetch next from c_銷售表_日期 into @pdno,@pdname,@salemoney--使用全局變量@@fetch_status值是否為0作為循環判斷條件,檢驗是否抽取到記錄,如抽取到就在循環體內輸出抽取到的值,--再繼續使用fetch命令抽取數據,直到@@FETCH_STATUS的值不為0為止while(@@FETCH_STATUS=0)beginprint '商品編號:'+@pdno+' 商品名稱:'+@pdname+' 銷售金額:'+convert(nchar(25),@salemoney)fetch next from c_銷售表_日期 into @pdno,@pdname,@salemoneyendend--關閉游標close c_銷售表_日期--釋放游標deallocate c_銷售表_日期set nocount offgo
理解例子?

?注:"--"可看成說明或者注釋文本

轉載于:https://www.cnblogs.com/xifengyeluo/p/5898518.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254368.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254368.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于在unity中動態獲取字符串后在InputField上進行判斷的BUG

今天想做一個簡單的密碼鎖定控制功能,但是出現了問題。我是在游戲開始時讀取streamingAsset中的text中的文本,其實就是密碼如下圖密碼是123456789 然后我在程序中輸入了該密碼出現錯誤,居然錯了。 然后我打印讀取的文本信息是什么、沒錯啊。然…

轉載 調用xvid 實現解碼

2011-06-01 00:26:14) 轉載view plaincopy to clipboardprint? /// intinit_decoder() { intret; xvid_gbl_init_t xvid_gbl_init; xvid_dec_create_txvid_dec_create; memset(&xvid_gbl_init, 0,sizeof(xvid_gbl_init_t)); memset(…

C# 數值和字符串之間的相互轉換

文章目錄方法用例ToString()方法Parse()方法博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 方法 ToString()方法:數值類型的 ToString(&#xff…

LeetCode Reverse Words in a String III

原題鏈接在這里:https://leetcode.com/problems/reverse-words-in-a-string-iii/#/description 題目: Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial wo…

創業感悟:技術兄弟為什么一直沒有起來(1)

相信很多做技術的朋友,看到“人脈”兩個字,就顯得有些敏感,有人甚至產生一種“抵觸”的心理。 因為在很多人的心中,會自動的把“人脈”和“關系”關聯起來,會把“人脈”與“走后門”,甚至會和“酒桌文化”&…

kali開啟ssh

修改 vi /etc/ssh/sshd_config 1.將 permitrootlogin 前面的注釋去掉,并且后面改為yes 如果沒有則添加permitrootlogin yes 2.將#PasswordAuthentication no的注釋去掉,并且將NO修改為YES //kali中默認是yes 3.按Esc , 同時按shift和冒號鍵 ,輸入wq ,回…

C# 引用類型與值類型轉換-裝箱和拆箱

文章目錄簡介用例裝箱拆箱博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 拆箱就是把 “引用” 類型轉化為 “值” 類型; 裝箱就是把 “值” 類型轉化為 “引用” 類型; 裝箱與拆箱是數據類型轉換的一種特殊應用…

XVID基本參數解析

XVID,X264等是MPEG4、H264標準的開源編碼器,其中X264只有編碼部分,解碼部分需要FFMPEG完成;XVID有編解碼部分,其中解碼亦可以利用FFMPEG中的MPEG4完成解碼。視頻壓縮算法的計算復雜度,都是比較高的。其中具…

自己整理的openresty安裝步驟

這幾天一直在研究對webapi的限流和名單的問題,于是看了開濤博客的方案,于是就用到了openresty,一個把Nginx和lua集成的東西。 下面就是整理的安裝方案(簡單使用基本可以這么安裝) 下載openresty(centos上下…

京東入職一周感悟:4個匹配和4個觀點

入職一周啦,隨便寫點。一、京東之緣1、我和京東之間的4點匹配Ⅰ技術2008年9月到2016年9月,一直堅持自學技術。京東,是一家商業化的互聯網公司,有技術積淀,有發揮空間。作為技術人員,職業匹配。Ⅱ讀書大學的…

C#賦值運算符及解析

文章目錄博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 賦值運算符對運算符右邊的操作式求值,并用該值設置運算符左邊的變量操作式。賦值運算符主要有簡單賦值及復合賦值運算符;可以放在賦值運算符左邊的對象類型是變量…

mysql 案例 ~ pt修復工具的使用

簡介:今天咱們來聊聊PT修復工具pt-table-sync 注意事項: 1 表要有主鍵或者唯一鍵 2 針對每一個chunk加的是for update鎖 3 修復過程中不能容忍從庫延遲 如果從庫延遲太多,pt-table-sync會長期持有對chunk的for update鎖,然后等待從庫的…

mpeg2,mpeg4,h264編碼標準的異同

1、宏塊匹配像素精度: MPEG2中,運動估計的精度是1/2的像素,通過線性插值實現(可能有簡單修正); H264和MPEG4 都可以支持1/4像素的精度 2、參考幀的數量:MPEG2,MPEG4的P幀只能有一幀…

四十歲學編程(一)

有時想想,人生還真的是曲折,人到中年了,我才開始學編程。 這一學,就是三年多,我居然堅持了下來。 更沒想到的是,三年后的我居然有勇氣投簡歷求職前端,雖然面試前戰戰兢兢。 很多時候&#xff0c…

01_SQlite數據庫簡介

轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/7023014.html

GNU Make 使用手冊(中譯版)

翻譯:于鳳昌譯者注:本人在閱讀Linux源代碼過程中發現如果要全面了解Linux的結構、理解Linux的編程總體設計及思想必須首先全部讀通Linux源代碼中各級的Makefile文件。目前,在網上雖然有一些著作,但都不能全面的解釋Linux源代碼中各…

基礎10 多進程、協程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)...

1.多進程實現方式(類似于多線程) 1 import multiprocessing2 import time,threading3 4 def thread_run():#定義一個線程函數5 print("我是子線程%s" %threading.get_ident()) #threading.get_ident()函數獲取當前線程的id6 def run(name…

C#比較運算符及解析

文章目錄博主寫作不容易,孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 比較運算符得出的結果是邏輯型(bool),即 True 或 False 。 比較運算符又稱關系運算符,我們可以把它理解為一種判斷,判斷的結果…

開發人員MySQL調優-理論篇

2019獨角獸企業重金招聘Python工程師標準>>> 修改字符集 查看字符集 show variables like character% show variables like %char% 上面的兩個命令都可以,我一般使用的下面的,會出來如下幾個字符集設定的選項: character_set_clie…

Java基礎之反射機制

Java反射機制 反射機制是什么 反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為ja…