版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、NIITSQL/Lesson 11/Slide 1 of 72實現(xiàn)處理事務(wù)和游標(biāo)目標(biāo)目標(biāo)*在這課里,你將學(xué)習(xí):3創(chuàng)建事務(wù)3提交事務(wù)3回滾事務(wù)3回滾事務(wù)的一部分3用鎖3理解死鎖3聲明游標(biāo)NIITSQL/Lesson 11/Slide 2 of 72實現(xiàn)處理事務(wù)和游標(biāo)目標(biāo)目標(biāo)(續(xù)續(xù))3打開游標(biāo)3從游標(biāo)取數(shù)據(jù)3關(guān)閉游標(biāo)NIITSQL/Lesson 11/Slide 3 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.1確保數(shù)據(jù)的一致性確保數(shù)據(jù)的一致性*一個員工代碼為000002的內(nèi)部候選人已經(jīng)被選定為Sales Manager( 崗位代碼為0001)崗位。這必須在Employee表中被更新,當(dāng)前已在的崗位的人
2、數(shù)也需要在Position表中更新。*上面要做的UPDATE語句如下:UPDATE EmployeeSET cCurrentPosition = 0001WHERE cEmployeeCode= 000002UPDATE PositionSET iCurrentStrength=iCurrentStrength + 1WHERE cPositionCode=0001NIITSQL/Lesson 11/Slide 4 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.1確保數(shù)據(jù)的一致性確保數(shù)據(jù)的一致性(續(xù)續(xù)) *系統(tǒng)崩潰是由于兩個更新之間導(dǎo)致數(shù)據(jù)不一致性而引起的。需要防止這種情況,要確保兩個更新或者都發(fā)生或
3、者都不發(fā)生。NIITSQL/Lesson 11/Slide 5 of 72實現(xiàn)處理事務(wù)和游標(biāo)任務(wù)單任務(wù)單*識別怎樣防止數(shù)據(jù)的不一致性*執(zhí)行事務(wù)*驗證數(shù)據(jù)在兩個表中都已更新NIITSQL/Lesson 11/Slide 6 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別怎樣防止數(shù)據(jù)的不一致性識別怎樣防止數(shù)據(jù)的不一致性*事務(wù)3 一個事務(wù)可以被定義為作為工作的單個的邏輯單元被一起執(zhí)行的一串的操作。3 單個的工作單元必須具有稱為ACID(原子性,一致性,獨立性,和持久性)的四個性質(zhì)原子性一致性獨立性持久性NIITSQL/Lesson 11/Slide 7 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別怎樣防止數(shù)據(jù)的不一致性識別怎
4、樣防止數(shù)據(jù)的不一致性(續(xù)續(xù))*為實現(xiàn)ACID性質(zhì)的需求,SQL Servr提供了下面的特性:3事務(wù)管理3上鎖3日志*事務(wù)日志-是SQL Server管理所有它的的事務(wù)而維護的日志*顯式事務(wù)-是事務(wù)的開始和結(jié)束都被顯式地定義的事務(wù)。NIITSQL/Lesson 11/Slide 8 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別怎樣防止數(shù)據(jù)的不一致性識別怎樣防止數(shù)據(jù)的不一致性(續(xù)續(xù))*BEGIN TRANSACTION:該語句標(biāo)志顯示事務(wù)的開始3 語法 BEGIN TRANSACTION transaction_name | tran_name_variable*COMMIT TRANSACTION或 COM
5、MIT WORK:語句標(biāo)志顯式事務(wù)的結(jié)束點3 語法 COMMIT TRANSACTIONtransaction_name |tran_name_variableNIITSQL/Lesson 11/Slide 9 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別怎樣防止數(shù)據(jù)的不一致性識別怎樣防止數(shù)據(jù)的不一致性(續(xù)續(xù))*Autocommit事務(wù)3 autocommit模式是SQL Server的缺省事務(wù)管理模式*結(jié)果:3 事務(wù)的使用可以避免數(shù)據(jù)的不一致性3 UPDATE語句可通過使用BEGIN TRANSACTION和COMMIT TRANSACTION語句來維持其原子性NIITSQL/Lesson 11/Sli
6、de 10 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)*動作:3 在 Query Analyzer窗口中,鍵入: BEGIN TRANSACTION trnUpdatePositionUPDATE Employee SET cCurrentPosition = 0001 WHERE cEmployeeCode= 000002 UPDATE Position SET iCurrentStrength = iCurrentStrength + 1 WHERE cPositionCode = 0001 COMMIT TRANSACTION trnUpdatePosition3 按F5來執(zhí)行此語句N
7、IITSQL/Lesson 11/Slide 11 of 72實現(xiàn)處理事務(wù)和游標(biāo)驗證兩個表中的數(shù)據(jù)都已被更新驗證兩個表中的數(shù)據(jù)都已被更新*動作:3 執(zhí)行下面的SELECT語句來驗證那些行已被更新:SELECT * FROM PositionWHERE cPositionCode = 0001 SELECT * FROM Employee WHERE cEmployeeCode = 000002 NIITSQL/Lesson 11/Slide 12 of 72實現(xiàn)處理事務(wù)和游標(biāo)稍等一下稍等一下*識別下面單個工作單元的性質(zhì):3 由并發(fā)事務(wù)引起的任何數(shù)據(jù)修改必須與其他并發(fā)事務(wù)所作的修改隔離開來3 所
8、有的數(shù)據(jù)修改都被執(zhí)行或者都沒有被執(zhí)行3 已完成事務(wù)的任何數(shù)據(jù)改變在系統(tǒng)中永久起作用3 事務(wù)成功地完成后所有的數(shù)據(jù)必須處于一致的狀態(tài)NIITSQL/Lesson 11/Slide 13 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.2回復(fù)改變回復(fù)改變*職位0015已經(jīng)招募了10個候選人。為了反映這一變化,對于cRequisitionCode 000004,Requisition表的siNoOfVacancy屬性將會減少10。還有,對于cPositionCode 0015,Position表的iCurrentStrength屬性也要減少10,使用下面命令:UPDATE Requisitionset siN
9、oOfVacancy=siNoOfVacancy - 10WHERE cRequisitionCode=000004 NIITSQL/Lesson 11/Slide 14 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.2回復(fù)改變回復(fù)改變(續(xù)續(xù))UPDATE Positionset iCurrentStrength=iCurrentStrength + 10WHERE cPositionCode=0015*這兩個語句都應(yīng)該是原子的,如果iCurrentStrength屬性變得不只是iCurrentStrength屬性,那么,由UPDATE語句所作的改變必須回復(fù)。NIITSQL/Lesson 11/Sli
10、de 15 of 72實現(xiàn)處理事務(wù)和游標(biāo)任務(wù)單任務(wù)單*識別怎樣恢復(fù)所作的改變*執(zhí)行事務(wù)*驗證事務(wù)是否被執(zhí)行NIITSQL/Lesson 11/Slide 16 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別如何回復(fù)所作的改變識別如何回復(fù)所作的改變*ROLLBACK TRANSACTION或 ROLLBACK WORK:這些語句把顯式的或隱式的事務(wù)回滾到事務(wù)的開始,或者回滾到事務(wù)內(nèi)的保存點3 語法ROLLBACK TRANSACTION transaction_name |tran_name_variable |savepoint_name |savepoint_variable*結(jié)果3 事務(wù)可用ROLLBA
11、CK TRANSACTION語句回復(fù)NIITSQL/Lesson 11/Slide 17 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)*動作:3 在Query Analyzer 窗口中,鍵入:BEGIN TRANSACTIONUPDATE RequisitionSET siNoOfVacancy=siNoOfVacancy - 10WHERE cRequisitionCode=000004UPDATE PositionSET iCurrentStrength=iCurrentStrength + 10WHERE cPositionCode=0015NIITSQL/Lesson 11/Slide
12、 18 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)(續(xù)續(xù))IF (SELECT iBudgetedStrength-iCurrentStrength FROM Position WHERE cPositionCode = 0015) 0BEGINPRINT Current strength cannot be more than budgeted strength. Transaction has not been committed.ROLLBACK TRANSACTIONENDELSENIITSQL/Lesson 11/Slide 19 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)(續(xù)續(xù)
13、)BEGINPRINT The transaction has been committed.COMMIT TRANSACTIONEND3按下F5執(zhí)行事務(wù)NIITSQL/Lesson 11/Slide 20 of 72實現(xiàn)處理事務(wù)和游標(biāo)驗證事務(wù)是否被執(zhí)行驗證事務(wù)是否被執(zhí)行*動作:3 查看結(jié)果窗口中所顯示的輸出。對于PositionCode0015,如果iBudgetedStrength和iCurrentStrength的差小于零,事務(wù)就被回滾且顯示Current strength cannot be more than budgeted strength. Transaction has no
14、t been committed.。否則,事務(wù)被提交且顯示相應(yīng)的消息。NIITSQL/Lesson 11/Slide 21 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.3回復(fù)事務(wù)的一部分回復(fù)事務(wù)的一部分*Employee和Position表需要用下面的事務(wù)來更新:事務(wù)1:UPDATE EmployeeSET cCurrentPosition = 0015WHERE cEmployeeCode = 000002UPDATE PositionSET iCurrentStrength = iCurrentStrength + 1WHERE cPositionCode = 0015NIITSQL/Lesso
15、n 11/Slide 22 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.3回復(fù)事務(wù)的一部分回復(fù)事務(wù)的一部分(續(xù)續(xù))*Requisition 和Position表需要使用下面的事務(wù)來更新:事務(wù) 2: UPDATE RequisitionSET siNoOfVacancy=siNoOfVacancy - 10WHERE cRequisitionCode=000004UPDATE PositionSET iCurrentStrength=iCurrentStrength + 10WHERE cPositionCode=0015NIITSQL/Lesson 11/Slide 23 of 72實現(xiàn)處理事務(wù)和游
16、標(biāo)11.D.3回復(fù)事務(wù)的一部分回復(fù)事務(wù)的一部分(續(xù)續(xù))*所有更新應(yīng)一起來做。對于cPositionCode 0015,如果iCurrentStrength值大于iBudgetedStrength值,由第二個事務(wù)所產(chǎn)生的改變必須被回復(fù),而由第一個事務(wù)產(chǎn)生的改變是允許的。NIITSQL/Lesson 11/Slide 24 of 72實現(xiàn)處理事務(wù)和游標(biāo)任務(wù)單任務(wù)單*識別怎樣把事務(wù)分解成部分*執(zhí)行事務(wù)*驗證事務(wù)的執(zhí)行NIITSQL/Lesson 11/Slide 25 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別怎樣把事務(wù)分解成部分識別怎樣把事務(wù)分解成部分*保存事務(wù)3 它在事務(wù)內(nèi)設(shè)置保存點 。保存點把事務(wù)分成幾
17、個邏輯單元,這樣事務(wù)可以返回到保存點,如果事務(wù)的一部分是有條件地被取消。3 語法SAVE TRANSACTION savepoint_name | savepoint_variable*結(jié)果3 事務(wù)可以用SAVE TRANSACTION語句分解成幾個邏輯單元NIITSQL/Lesson 11/Slide 26 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)*動作:3 在Query Analyzer 窗口中,鍵入:BEGIN TRANSACTION UPDATE EmployeeSET cCurrentPosition = 0015WHERE cEmployeeCode = 000002UPDAT
18、E PositionSET iCurrentStrength = iCurrentStrength + 1WHERE cPositionCode = 0015NIITSQL/Lesson 11/Slide 27 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)(續(xù)續(xù))SAVE TRANSACTION trnTransaction1UPDATE RequisitionSET siNoOfVacancy=siNoOfVacancy - 10WHERE cRequisitionCode=000004UPDATE PositionSET iCurrentStrength=iCurrentStrength+
19、10WHERE cPositionCode=0015NIITSQL/Lesson 11/Slide 28 of 72實現(xiàn)處理事務(wù)和游標(biāo)執(zhí)行事務(wù)執(zhí)行事務(wù)(續(xù)續(xù))IF (SELECT iBudgetedStrength-iCurrentStrength FROM Position WHERE cPositionCode = 0015) 80UPDATE ExternalCandidateSET dInterviewDate = getdate()+ 2WHERE siTestScore 80*識別為什么User2不能執(zhí)行此事務(wù)。NIITSQL/Lesson 11/Slide 33 of 72實現(xiàn)處
20、理事務(wù)和游標(biāo)任務(wù)單任務(wù)單*識別User2為什么不能執(zhí)行此事務(wù)*模擬兩個事務(wù)來理解上鎖*在終端1上執(zhí)行事務(wù)*在終端2上執(zhí)行事務(wù)*在終端1上執(zhí)行命令*驗證事務(wù)進行中表被上鎖*在終端2上執(zhí)行COMMIT TRANSACTION語句NIITSQL/Lesson 11/Slide 34 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)*上鎖3 確保事務(wù)的完整性和數(shù)據(jù)庫的一致性3 是自動實施的3 不上鎖,查看事務(wù)處理是不可能的。NIITSQL/Lesson 11/Slide 35 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(
21、續(xù)續(xù))*事務(wù)的并發(fā)性3 SQL Server提供了樂觀的和悲觀的并發(fā)性控件3 樂觀并發(fā)性控件建立在多用戶間資源沖突大概是不可能的假設(shè)的基礎(chǔ)上允許事務(wù)執(zhí)行不用鎖定任何資源只有在提交事務(wù)時才進行資源檢查NIITSQL/Lesson 11/Slide 36 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))3悲觀并發(fā)性控件在事務(wù)處理期間的鎖定資源*并發(fā)性問題3 丟失更新丟失更新問題發(fā)生在當(dāng)兩個或多個事務(wù)基于原先所選值試圖修改同一行的時候3 自由依賴性自由依賴性問題(uncommitted dependency )也稱為無效讀入(dirty read)問題N
22、IITSQL/Lesson 11/Slide 37 of 72實現(xiàn)處理事務(wù)和游標(biāo)*識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))3 不一致性分析不一致性分析問題又稱為 不可重復(fù)問題3 幻象讀取幻象讀取又稱為作幻象問題NIITSQL/Lesson 11/Slide 38 of 72實現(xiàn)處理事務(wù)和游標(biāo)*識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))*鎖項- SQL Server 可對以下資源上鎖:3 RID3 Key3 Page3 Extent3 Table3 DatabaseNIITSQL/Lesson 11/Slide 39 of 72實現(xiàn)處理事務(wù)和游標(biāo)
23、*識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))*SQL Server鎖模型3 共享鎖允許并發(fā)事務(wù)來讀取資源3 更新鎖避免了常見形式的死瑣發(fā)生3 互斥型鎖唯一地限制并發(fā)事務(wù)訪問一個資源NIITSQL/Lesson 11/Slide 40 of 72實現(xiàn)處理事務(wù)和游標(biāo)*識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))3 意向鎖指示SQL Server要在層次結(jié)構(gòu)較低的某個資源上獲得一個共享或排它鎖3 模式鎖當(dāng)任何數(shù)據(jù)定義(DDL)操作在表上執(zhí)行時,SQL Server考察模式修改 (Sch-M) 鎖NIITSQL/Lesson 11/Slide 41 of
24、72實現(xiàn)處理事務(wù)和游標(biāo)*識別為什么識別為什么User2不能執(zhí)行此事務(wù)不能執(zhí)行此事務(wù)(續(xù)續(xù))*結(jié)果:3 User2不能執(zhí)行他的事務(wù),因為當(dāng)它正在被User1使用時SQL Server已經(jīng)鎖定了ExternalCandidate表NIITSQL/Lesson 11/Slide 42 of 72實現(xiàn)處理事務(wù)和游標(biāo)模擬兩個事務(wù)來理解上鎖模擬兩個事務(wù)來理解上鎖*動作:3 為模擬兩個事務(wù),從名為Terminal1 和 Terminal2的二個終端連接到SQL Server。NIITSQL/Lesson 11/Slide 43 of 72實現(xiàn)處理事務(wù)和游標(biāo)在在Terminal1上執(zhí)行事務(wù)上執(zhí)行事務(wù)*動作:3
25、 在Query Analyzer 窗口中,鍵入:BEGIN TRANSACTIONUPDATE ExternalCandidateSET siTestScore = 90WHERE cCandidateCode = 000002UPDATE ExternalCandidateSET dTestDate = getdate()WHERE cCandidateCode = 000002 3 按F5執(zhí)行事務(wù)NIITSQL/Lesson 11/Slide 44 of 72實現(xiàn)處理事務(wù)和游標(biāo)在在Terminal2上執(zhí)行事務(wù)上執(zhí)行事務(wù)*動作:3 在Query Analyzer 窗口中,鍵入:BEGIN T
26、RANSACTION SELECT * FROM ExternalCandidateWHERE siTestScore 80 UPDATE ExternalCandidateSET dInterviewDate = getdate()+ 2WHERE siTestScore 803 按下F5執(zhí)行事務(wù)NIITSQL/Lesson 11/Slide 45 of 72實現(xiàn)處理事務(wù)和游標(biāo)在在Terminal1上執(zhí)行命令上執(zhí)行命令*動作:3 在Query Analyzer 窗口中,鍵入:COMMIT TRANSACTION3 按下F5來執(zhí)行語句NIITSQL/Lesson 11/Slide 46 of
27、72實現(xiàn)處理事務(wù)和游標(biāo)*驗證事務(wù)進行時表的鎖定驗證事務(wù)進行時表的鎖定*動作:3 在Terminal2上事務(wù)將要等待由Terminal1解鎖的ExternalCandiate表3 一旦COMMIT TRANSACTION命令在Terminal1上給出,在Terminal2上的事務(wù)就進行且User1的最近更新將是可見的 NIITSQL/Lesson 11/Slide 47 of 72實現(xiàn)處理事務(wù)和游標(biāo)在在Terminal2上執(zhí)行上執(zhí)行COMMIT TRANSACTION語句語句*動作:3 在Query Analyzer 窗口中,鍵入:COMMIT TRANSACTION3 按下F5來執(zhí)行此語句NI
28、ITSQL/Lesson 11/Slide 48 of 72實現(xiàn)處理事務(wù)和游標(biāo)稍等一下稍等一下*下面哪些并發(fā)問題關(guān)系到:3 何時兩個或多個事務(wù)試圖基于原先選擇的值來修改同一行3 何時把文檔分發(fā)給人們,這些文檔包含了原先文檔中不再存在的信息NIITSQL/Lesson 11/Slide 49 of 72實現(xiàn)處理事務(wù)和游標(biāo)死鎖死鎖*死鎖是這樣一種情形:兩個用戶(或事務(wù))在個別的對象的上鎖,并且每個用戶正在等待另一個對象的鎖DISTRIBUTORPRODUCTSTRANSACTION ATRANSACTION BNIITSQL/Lesson 11/Slide 50 of 72實現(xiàn)處理事務(wù)和游標(biāo)死鎖死
29、鎖(續(xù)續(xù))*設(shè)置死鎖優(yōu)選級3 為探測死鎖的情況,SQL Server掃描在等待鎖請求的會話3 SQL Server提供SET DEADLOCK_PRIORITY命令來定制死鎖3 語法SET DEADLOCK_PRIORITY LOW|NORMAL|deadlock_var*定制LOCK_TIMEOUT3 SET LOCK_TIMEOUT命令可被用來設(shè)置等待被阻塞資源語句的最長時間NIITSQL/Lesson 11/Slide 51 of 72實現(xiàn)處理事務(wù)和游標(biāo)死鎖死鎖(續(xù)續(xù))3 按缺省方式, SQL Server不實施超時周期3 語法SET LOCK_TIMEOUT timeout_perio
30、dNIITSQL/Lesson 11/Slide 52 of 72實現(xiàn)處理事務(wù)和游標(biāo)稍等一下稍等一下.*什么是死鎖?你可怎樣定制死鎖?NIITSQL/Lesson 11/Slide 53 of 72實現(xiàn)處理事務(wù)和游標(biāo)游標(biāo)游標(biāo)*游標(biāo)是一個在給定結(jié)果集中幫助訪問和操縱數(shù)據(jù)的數(shù)據(jù)庫對象*游標(biāo)能以下列方式處理結(jié)果集中的行:3 允許從結(jié)果集中檢索指定的行3 允許結(jié)果集中當(dāng)前行被修改3 幫助從結(jié)果集中當(dāng)前行導(dǎo)航到不同的行3 允許被其它用戶修改的數(shù)據(jù)在結(jié)果集中是可見的NIITSQL/Lesson 11/Slide 54 of 72實現(xiàn)處理事務(wù)和游標(biāo)游標(biāo)的結(jié)構(gòu)游標(biāo)的結(jié)構(gòu)*當(dāng)在SQL Server中使用游標(biāo)時,
31、需要執(zhí)行下面任務(wù):3 需要定義游標(biāo)和設(shè)置的它的屬性。3 需要打開游標(biāo)。3 所需的行要從游標(biāo)取得。3 如果需要的話,游標(biāo)的當(dāng)前行中的數(shù)據(jù)可被修改的。3 需要關(guān)閉游標(biāo)。3 游標(biāo)應(yīng)解除分配。這是一個很好的習(xí)慣由于游標(biāo)所用的資源被釋放。NIITSQL/Lesson 11/Slide 55 of 72實現(xiàn)處理事務(wù)和游標(biāo)11.D.5把指定屬性作為變量顯示把指定屬性作為變量顯示*你需要召集所有部門頭目開會。為此你需要部門和相應(yīng)部門頭目的列表如下,其格式如下: Department Name = Production Department Head = Samuel Moore Department Name
32、 = Sales Department Head = Donald Fleming . . NIITSQL/Lesson 11/Slide 56 of 72實現(xiàn)處理事務(wù)和游標(biāo)任務(wù)單任務(wù)單*識別創(chuàng)建報告所需的步驟*執(zhí)行創(chuàng)建報告所需的語句*按所需的結(jié)果驗證其輸出NIITSQL/Lesson 11/Slide 57 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟*聲明游標(biāo)3 你可以用DECLARE CURSOR語句來定義游標(biāo)和它的特性集3 語法DECLARE cursor_name INSENSITIVE SCROLLCURSOR FOR select_statementF
33、OR READ ONLY | UPDATE OF column_listNIITSQL/Lesson 11/Slide 58 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))*打開游標(biāo)3 你可以用OPEN語句打開前面聲明過的游標(biāo)3 語法OPEN cursor_nameNIITSQL/Lesson 11/Slide 59 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))*取數(shù)據(jù)3 在打開一個游標(biāo)后,你可以從游標(biāo)的結(jié)果集中檢索指定行。SQL Server 2000提供FETCH語句來完成這項任務(wù)。3 語法FETCH NEXT | PR
34、IOR | FIRST | LAST | ABSOLUTE n | RELATIVE n FROM cursor_name INTO variable_name ,.n NIITSQL/Lesson 11/Slide 60 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))*關(guān)閉游標(biāo)3 為了釋放被游標(biāo)持有的資源你必須關(guān)閉游標(biāo)。游標(biāo)可以用CLOSE語句關(guān)閉。 3 SyntaxCLOSE cursor_nameNIITSQL/Lesson 11/Slide 61 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))*解除分配游標(biāo)3 你可以抹
35、去由DECLARE游標(biāo)語句定義的游標(biāo)的定義3 語法 DEALLOCATE cursor_nameNIITSQL/Lesson 11/Slide 62 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))*結(jié)果:3 你需要用下面的語句來顯示報告。.-Create two variables that would store the -values returned by the fetch statement.DECLARE DepartmentName char(25)DECLARE DepartmentHead char(25)- Defines the curs
36、or that can be used to - access the records of the table,row by -row.NIITSQL/Lesson 11/Slide 63 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))DECLARE curDepartment cursor forSELECT vDepartmentName,vDepartmentHead FROM Department- Open the cursorOPEN curDepartment- Fetch the rows into variablesFETCH curDep
37、artment into DepartmentName, DepartmentHeadNIITSQL/Lesson 11/Slide 64 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))- Start a loop to display all the rows of - the cursor.While (fetch_status = 0)BEGINPrint Department Name = + DepartmentNamePrint Department Head = + DepartmentHead- Fetch the next row from the cursor. FETCH curDepartment into DepartmentName, DepartmentHeadENDNIITSQL/Lesson 11/Slide 65 of 72實現(xiàn)處理事務(wù)和游標(biāo)識別創(chuàng)建報告所需的步驟識別創(chuàng)建報告所需的步驟(續(xù)續(xù))- Close the cursorCLOSE curDepartment- De
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2028年中國房地產(chǎn)管理軟件市場競爭格局及投資前景展望報告
- 2022-2027年中國血管支架行業(yè)發(fā)展概況及行業(yè)投資潛力預(yù)測報告
- 2022-2027年中國焙烤食品行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 二零二五版智慧城市建設(shè)保安勞務(wù)派遣合同3篇
- 7-2《歸園田居·其一》說課稿 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊
- 2025年中國廣州市住房租賃行業(yè)市場全景調(diào)研及投資規(guī)劃建議報告
- 項目研究項目報告可行性計劃書
- 2024秋五年級英語上冊 Module 9 Unit 2 I feel happy說課稿1 外研版(三起)
- 2023-2029年中國水泥通風(fēng)管道行業(yè)發(fā)展監(jiān)測及投資前景展望報告
- 基于2025年度財務(wù)預(yù)算的金融服務(wù)協(xié)議2篇
- 湘美版七年級上冊美術(shù) 2.卡通故事 教案( )
- 單位檔案三合一制度怎么寫范文
- 【課件】跨學(xué)科實踐:探索廚房中的物態(tài)變化問題-人教版八年級上冊物理
- GB 30254-2024高壓三相籠型異步電動機能效限定值及能效等級
- 房地產(chǎn)企業(yè)崗位招聘筆試題題庫之四(含答案)營銷副總經(jīng)理
- 重大事故隱患判定標(biāo)準(zhǔn)與相關(guān)事故案例培訓(xùn)課件
- 某集團下屬子公司年度經(jīng)營績效管理辦法全套
- 2024-2030年中國汽車防撞梁行業(yè)發(fā)展動態(tài)與市場需求研究報告
- 高中語文新課標(biāo)必背古詩文72篇
- 大學(xué)俄語一級課程考試試卷 (A 卷)
- 骨科中醫(yī)護理方案培訓(xùn)計劃(2篇)
評論
0/150
提交評論