• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SQL數(shù)據(jù)庫(kù)中基于游標(biāo)的數(shù)據(jù)更新

      2015-04-16 01:30:10姚曦
      電腦與電信 2015年9期
      關(guān)鍵詞:游標(biāo)關(guān)鍵字語句

      姚曦

      (福建衛(wèi)生職業(yè)技術(shù)學(xué)院公共基礎(chǔ)部,福建 福州 350101)

      1 游標(biāo)的概念

      在數(shù)據(jù)庫(kù)的使用中,常常會(huì)遇到這種情況:用查詢語句,得到一個(gè)結(jié)果集,但對(duì)這個(gè)結(jié)果的操作不是相同的,需要根據(jù)不同的條件,對(duì)不同的記錄進(jìn)行不同的處理。此時(shí),就需要用到游標(biāo)。

      游標(biāo)實(shí)際上是一種能從包括多條記錄的結(jié)果集中每次提取一條記錄的機(jī)制。游標(biāo)總是與一條SQL查詢語句相關(guān)聯(lián),允許應(yīng)用程序?qū)ELECT語句返回的行結(jié)果集中每一行進(jìn)行相同或不同的操作,而不是一次對(duì)整個(gè)結(jié)果集進(jìn)行同一種操作。這種特性使得對(duì)數(shù)據(jù)的操縱十分靈活。

      2 游標(biāo)的種類

      SQL支持三種類型的游標(biāo):Transact-SQL游標(biāo)、API游標(biāo)和客戶游標(biāo)。

      Transact-SQL游標(biāo):T-SQL游標(biāo)是由DECLARE CURSOR語句定義,主要用在腳本、存儲(chǔ)過程和觸發(fā)器中,應(yīng)用在服務(wù)器上。

      API游標(biāo):API游標(biāo)使用在客戶端與服務(wù)器端的連接程序中(如OLE DB和ODBC等)。

      客戶游標(biāo):客戶游標(biāo)主要在當(dāng)需要在客戶機(jī)上緩存結(jié)果集時(shí)使用。

      3 游標(biāo)的使用步驟

      游標(biāo)的操作可分為以下幾個(gè)步驟:

      3.1 聲明游標(biāo)

      聲明游標(biāo)的語法為:

      DECLARE<游標(biāo)名>[INSENSITIVE][SCROLL]CURSOR

      FOR<SELECT語句>

      [FOR{READ ONLY|UPDATE][OF<列名>[,…n]]}]

      INSENSITIVE關(guān)鍵字:將取出的數(shù)據(jù)記錄放在一個(gè)臨時(shí)表內(nèi),對(duì)游標(biāo)的讀取操作由臨時(shí)表來應(yīng)答。游標(biāo)不會(huì)隨著基表內(nèi)容的改變而改變,同時(shí)也無法通過游標(biāo)來更新基本表。

      SCROLL關(guān)鍵字:表明所有的提取操作(FIRST,LAST,PRIOR,NEXT,RELATIVE,ABSOLUTE)等都可用,如不使用該保留字,只能進(jìn)行NEXT操作。

      READ ONLY關(guān)鍵字:只讀游標(biāo)。

      UPDATE關(guān)鍵字:可修改的游標(biāo),或指定修改的列。

      3.2 打開游標(biāo)

      聲明游標(biāo)后,如果要從游標(biāo)中讀取數(shù)據(jù),必須打開游標(biāo)。

      打開游標(biāo)的語法為:

      OPEN[GLOBAL]<游標(biāo)名>│<游標(biāo)變量>

      在游標(biāo)成功打開后,全局變量@@CURSOR_ROWS將用來記錄游標(biāo)內(nèi)數(shù)據(jù)行數(shù)。變量返回值代表的狀態(tài)如表1所示。

      表1 @@CURSOR_ROWS變量的返回值

      3.3 讀取游標(biāo)中的數(shù)據(jù)

      當(dāng)游標(biāo)成功打開以后,可以使用FETCH語句從中讀取數(shù)據(jù)。

      {{GLOBAL<游標(biāo)名>}│<@游標(biāo)變量>}

      [INTO@<變量名>[,…n]]

      NEXT│PRIOR│FIRST│LAST:用于說明讀取數(shù)據(jù)的位置。

      ABSOLUTE、RELATIVE:給出讀取數(shù)據(jù)的位置與游標(biāo)頭或當(dāng)前位置的關(guān)系。其中N必須為整型常量或變量。

      其中全局變量@@FETCH_STATUS返回上次執(zhí)行FETCH命令的狀態(tài)。在每次用FETCH從游標(biāo)中讀取數(shù)據(jù)時(shí),都應(yīng)檢查該變量,以確定上次FETCH操作是否成功,來決定如何進(jìn)行下一步處理。變量的返回值的狀態(tài)如表2所示。

      表2 @@FETCH_STATUS的返回值

      3.4 關(guān)閉游標(biāo)

      CLOSE[GLOBAL]<游標(biāo)名>|@<游標(biāo)變量>

      游標(biāo)關(guān)閉后,其定義仍在,需要時(shí)可用OPEN語句打開,再次使用。若確認(rèn)游標(biāo)不再需要,就要釋放其定義占用的系統(tǒng)空間,即刪除游標(biāo)。

      DEALLOCATE[GLOBAL]<游標(biāo)名>|@<游標(biāo)變量>

      4 游標(biāo)應(yīng)用的實(shí)例

      案例說明:數(shù)據(jù)庫(kù)company中有兩張表。Salary顯示的是全體員工的工資表,工作一段時(shí)間后,公司將按照員工的工作情況給員工加工資,每個(gè)員工加的工資不一樣多,有的員工工資有調(diào)整,有的員工工資無調(diào)整。工資調(diào)整表為addincome。這種不是統(tǒng)一變動(dòng)的情況,使用游標(biāo)就非常靈活便捷。

      游標(biāo)使用的具體代碼如下:

      select*from salary

      declare@id char(10),@salary int

      declare sa_cur1 cursor

      以上代碼說明:首先基于salary表生成一個(gè)更新游標(biāo)的結(jié)果集。從中逐條讀取id參數(shù),將id參數(shù)存放在@id變量中。使用@id變量在addincome表中查詢是否有此@id員工,如果有此@id就表明,此@id的工資有調(diào)整,使用更新游標(biāo)將調(diào)整的工資更新到salary表。如果無此@id就說明此@id的工資無調(diào)整,回到游標(biāo)結(jié)果集中讀取下一條記錄。

      5 結(jié)論

      本文介紹了SQL數(shù)據(jù)庫(kù)中游標(biāo)的概念,闡述了游標(biāo)的類型及游標(biāo)的使用步驟。最后通過一個(gè)更新工資表的實(shí)例說明游標(biāo)的使用方法。

      [1]李丹.SQL Server2005數(shù)據(jù)庫(kù)管理與開發(fā)實(shí)用教程[M].北京:機(jī)械工業(yè)出版社,2010.

      [2]申時(shí)凱,戴祖誠(chéng),佘玉梅.數(shù)據(jù)庫(kù)原理與技術(shù)[M].北京:清華大學(xué)出版社,2010.

      猜你喜歡
      游標(biāo)關(guān)鍵字語句
      開繞組直線游標(biāo)永磁電機(jī)的矢量控制研究
      履職盡責(zé)求實(shí)效 真抓實(shí)干勇作為——十個(gè)關(guān)鍵字,盤點(diǎn)江蘇統(tǒng)戰(zhàn)的2021
      MySQL數(shù)據(jù)庫(kù)下游標(biāo)的設(shè)計(jì)與應(yīng)用
      測(cè)量不確定度在游標(biāo)式輪對(duì)內(nèi)距尺檢定裝置中的應(yīng)用
      重點(diǎn):語句銜接
      成功避開“關(guān)鍵字”
      精彩語句
      如何搞定語句銜接題
      基于用戶反饋的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵字查詢系統(tǒng)
      基于SQL游標(biāo)的研究與應(yīng)用
      奉新县| 福泉市| 阿勒泰市| 巴马| 上虞市| 阜新| 瑞安市| 车致| 卓尼县| 乐清市| 满洲里市| 凭祥市| 竹北市| 庆安县| 乌恰县| 安吉县| 察隅县| 宁河县| 郴州市| 香港| 甘南县| 隆昌县| 息烽县| 雅江县| 改则县| 礼泉县| 萨嘎县| 柞水县| 泸西县| 来宾市| 平凉市| 陆良县| 凯里市| 剑川县| 金川县| 彭阳县| 腾冲县| 赤壁市| 台前县| 沿河| 万源市|