第七章-SQL-Server-2000高級應(yīng)用_第1頁
第七章-SQL-Server-2000高級應(yīng)用_第2頁
第七章-SQL-Server-2000高級應(yīng)用_第3頁
第七章-SQL-Server-2000高級應(yīng)用_第4頁
第七章-SQL-Server-2000高級應(yīng)用_第5頁
已閱讀5頁,還剩128頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第7章章 SQL Server 2000高級應(yīng)用高級應(yīng)用 7.1 Transact-SQL程序設(shè)計(jì)程序設(shè)計(jì)7.2 存儲(chǔ)過程存儲(chǔ)過程7.3 觸發(fā)器觸發(fā)器7.4 備份和還原備份和還原 7.1 Transact-SQL程序設(shè)計(jì)程序設(shè)計(jì) Transact-SQL語言就是在標(biāo)準(zhǔn)語言就是在標(biāo)準(zhǔn)SQL的基礎(chǔ)上的基礎(chǔ)上進(jìn)行擴(kuò)充,引入了進(jìn)行擴(kuò)充,引入了程序設(shè)計(jì)程序設(shè)計(jì)思想,加入了思想,加入了流流程控制語句程控制語句7.1.1 Transact-SQL程序的結(jié)構(gòu)程序的結(jié)構(gòu)1.Transact-SQL程序的結(jié)構(gòu)程序的結(jié)構(gòu) 引例,教學(xué)管理數(shù)據(jù)庫引例,教學(xué)管理數(shù)據(jù)庫TEACH,從數(shù)據(jù)表,從數(shù)據(jù)表SC中讀取學(xué)號為中讀取

2、學(xué)號為“S1”同學(xué)所學(xué)課程的平均分,同學(xué)所學(xué)課程的平均分,如果該平均分大于或等于如果該平均分大于或等于60分,則程序輸出分,則程序輸出“平均成績超過平均成績超過60”,否則輸出,否則輸出“平均成績不平均成績不超過超過60”。 USE Teach GODECLARE AvgScore DECIMALSET AvgScore=60IF( SELECT AVG(Score) FROM SC WHERE SNo=S1 ) =AvgScore PRINT 平均成績超過平均成績超過60ELSE PRINT 課程平均成績不超過課程平均成績不超過60GO“批批”處理處理定義變量定義變量變量賦值變量賦值置為當(dāng)前

3、數(shù)據(jù)庫為置為當(dāng)前數(shù)據(jù)庫為Teach同一同一“批批”的語句要么都執(zhí)行要么都的語句要么都執(zhí)行要么都不執(zhí)行不執(zhí)行 Transact-SQL程序與一般的高級語言程序與一般的高級語言的語法要素是基本一致的,主要含有的語法要素是基本一致的,主要含有注釋、注釋、變量與常量、各種運(yùn)算符、函數(shù)與表達(dá)式、變量與常量、各種運(yùn)算符、函數(shù)與表達(dá)式、流程控制語句、批處理流程控制語句、批處理等等 。7.1.2 變量變量 1.局部變量局部變量 由由用戶定義用戶定義變量名符合標(biāo)識(shí)符命名規(guī)則,變量名符合標(biāo)識(shí)符命名規(guī)則,不區(qū)分不區(qū)分大小寫大小寫作用范圍僅在其聲明的程序段中作用范圍僅在其聲明的程序段中聲明格式:聲明格式:DECLAR

4、E 變量名變量名 變量類型變量類型 ,變量名變量名 變量類型變量類型 賦值語句賦值語句SELECT 局部變量局部變量=變量值變量值或或SET 局部變量局部變量=變量值變量值 基本數(shù)據(jù)類型見基本數(shù)據(jù)類型見第第3章章 表表3.1標(biāo)識(shí)符命名規(guī)則標(biāo)識(shí)符命名規(guī)則以以ASCII字符、字符、Unicode字符、下劃線、字符、下劃線、或或#開頭,后續(xù)可跟一個(gè)或若干個(gè)開頭,后續(xù)可跟一個(gè)或若干個(gè)ASCII字符、字符、Unicode字符、字符、下劃線、下劃線、$、或或#,但不能,但不能全為下劃線、全為下劃線、 或或#。不能是不能是T-SQL的保留字,的保留字,不允許嵌入空格不允許嵌入空格或或其它特殊字符。其它特殊字

5、符。最大長度為最大長度為128個(gè)字符個(gè)字符例例7-1 聲明一個(gè)長度為聲明一個(gè)長度為8個(gè)字符的變量個(gè)字符的變量id,并賦,并賦值為值為10010001 。DECLARESELECT例例7-2 在在S表中查詢學(xué)號為表中查詢學(xué)號為S7的學(xué)生姓名的學(xué)生姓名SNo,并存儲(chǔ)到變量并存儲(chǔ)到變量name中中Declare name varchar(10)Select SN From S Where SNo=S7變量聲明后,變量聲明后,默認(rèn)初值為默認(rèn)初值為NULL字符型字符型變量聲明時(shí)要變量聲明時(shí)要指定長度指定長度Set語句一次只能給一個(gè)語句一次只能給一個(gè)變量賦值變量賦值name=id char(8)id=10

6、0100012.全局變量全局變量 全局變量由全局變量由SQL Server 2000系統(tǒng)定義系統(tǒng)定義對對用戶是只讀用戶是只讀的,無法對進(jìn)行修改的,無法對進(jìn)行修改任何程序均可調(diào)用任何程序均可調(diào)用全局變量以全局變量以 開頭開頭 3.注釋符注釋符 單行注釋單行注釋 “-” 多行注釋多行注釋“ /*/ ”7.1.3 流程控制命令流程控制命令 1.BEGINEND格式格式 BEGIN END將將BEGINEND內(nèi)的所有語句內(nèi)的所有語句作為一個(gè)單作為一個(gè)單元執(zhí)行元執(zhí)行2.IFELSE格式格式IF ELSE 可選可選USE Teach GODECLARE AvgScore DECIMAL SET AvgSc

7、ore=60 IF (SELECT AVG(Score) FROM SC WHERE SNo=S1) =AvgScore PRINT 平均成績超過平均成績超過60ELSE BEGIN PRINT 課程平均成績不超過課程平均成績不超過60 PRINT 壞學(xué)生!壞學(xué)生! ENDGO3.IF NOT EXISTS ELSE格式格式IF NOT EXISTS(SELECT 子查詢子查詢) ELSE 用于檢測數(shù)據(jù)是否存在用于檢測數(shù)據(jù)是否存在SELECT 子查詢結(jié)果不為空,子查詢結(jié)果不為空,EXISTS為為真真,執(zhí)行執(zhí)行IF后面的語句后面的語句1,否則執(zhí)行,否則執(zhí)行ELSE語句語句2練習(xí)練習(xí) 在在S表中查

8、詢學(xué)號為表中查詢學(xué)號為S1的同學(xué)記錄,如果的同學(xué)記錄,如果存在輸出存在輸出“存在存在S1學(xué)生學(xué)生”,否則輸出,否則輸出“不存不存在在S1學(xué)生學(xué)生”DECLARE message Varchar(50)IF EXISTS ( ) SET message=存在存在S1學(xué)生學(xué)生ELSE SET message=不存在不存在S1學(xué)生學(xué)生PRINT message Select * From S Where SNo=S14. CASE格式格式1:CASE WHEN THEN WHEN THEN ELSE END判斷表達(dá)式的值,如果與某個(gè)判斷表達(dá)式的值,如果與某個(gè)WHEN的的值相值相等等,則執(zhí),則執(zhí)THE

9、N后面的語句,后面的語句,然后跳出然后跳出CASE如果沒有匹配也沒有如果沒有匹配也沒有ELSE,則返回,則返回NULL格式格式2:CASE WHEN THEN WHEN THEN ELSE END判斷判斷WHEN的的表達(dá)式表達(dá)式1是否為是否為“真真” ,如果,如果為為“真真”執(zhí)行執(zhí)行THEN后面的語句,后面的語句,然后跳出然后跳出CASECASE可用于標(biāo)準(zhǔn)可用于標(biāo)準(zhǔn)SQL命令中命令中例例7-5 在在SC表中輸出學(xué)生的表中輸出學(xué)生的SNo,CNo和成績和成績score的等級的等級select SNo, CNo, case when score=90 then 優(yōu)秀優(yōu)秀 when score=80

10、 then 良好良好 when score=70 then 中等中等 when score=60 then 及格及格 else 不及格不及格endfrom sc等級等級=列名列名別名別名練習(xí):在練習(xí):在S(SNo,SN,Sex,Age,Dept)表中輸出學(xué)表中輸出學(xué)生的姓名生的姓名SN和性別,如果是男生輸出和性別,如果是男生輸出M,女,女生輸出生輸出Fselect SN, 性別性別=case sexwhen 男男 then Mwhen 女女 then Fendfrom s列名列名別名別名5. WHILEBREAKCONTINUE語句語句格式:格式: WHILE 條件條件BEGIN 循環(huán)體循環(huán)體

11、 BREAK CONTINUEENDBREAK語句語句用于用于退出本層退出本層循環(huán)。循環(huán)。CONTINUE語句語句,結(jié)束本次結(jié)束本次循環(huán),跳轉(zhuǎn)到下循環(huán),跳轉(zhuǎn)到下一次循環(huán)條件的判斷。一次循環(huán)條件的判斷。例例 求求110的和的和declare i int, sum intset i=1set sum=0while i=AvgScore PRINT 平均成績超過平均成績超過60ELSE BEGIN PRINT 課程平均成績不超過課程平均成績不超過60 PRINT 不及格不及格 ENDGO練習(xí),在練習(xí),在SC(SNo,CNo,Score)表中查詢表中查詢S1學(xué)生學(xué)生的平均成績,如果大于或等于的平均成績

12、,如果大于或等于80分則輸出分則輸出“獲得獎(jiǎng)學(xué)金獲得獎(jiǎng)學(xué)金”,否則輸出,否則輸出“沒有獲得沒有獲得”If (select avg(score) from sc where sno=s1)=80 print 獲得獎(jiǎng)學(xué)金獲得獎(jiǎng)學(xué)金else print 沒有獲得沒有獲得WHILEBREAKCONTINUE語句語句格式:格式: WHILE 條件條件BEGIN 循環(huán)體循環(huán)體 BREAK CONTINUEENDBREAK語句語句用于用于退出本層退出本層循環(huán)。循環(huán)。CONTINUE語句語句,結(jié)束本次結(jié)束本次循環(huán),跳轉(zhuǎn)到下循環(huán),跳轉(zhuǎn)到下一次循環(huán)條件的判斷。一次循環(huán)條件的判斷。練習(xí),使用練習(xí),使用T-SQL求求

13、10的階乘的階乘declare i int, mul intset i=1set mul=1while i=10 begin set mul=mul*i set i=i+1 endselect mul2. CASE格式格式1:CASE WHEN THEN WHEN THEN ELSE END判斷表達(dá)式的值,如果與某個(gè)判斷表達(dá)式的值,如果與某個(gè)WHEN的的值相值相等等,則執(zhí),則執(zhí)THEN后面的語句,后面的語句,然后跳出然后跳出CASE如果沒有匹配也沒有如果沒有匹配也沒有ELSE,則返回,則返回NULL格式格式2:CASE WHEN THEN WHEN THEN ELSE END判斷判斷WHEN的

14、的表達(dá)式表達(dá)式1是否為是否為“真真” ,如果,如果為為“真真”執(zhí)行執(zhí)行THEN后面的語句,后面的語句,然后跳出然后跳出CASECASE可用于標(biāo)準(zhǔn)可用于標(biāo)準(zhǔn)SQL命令中命令中例例7-5 在在SC表中輸出學(xué)生的表中輸出學(xué)生的SNo,CNo和成績和成績score的等級的等級select SNo, CNo, case when score=90 then 優(yōu)秀優(yōu)秀 when score=80 then 良好良好 when score=70 then 中等中等 when score=60 then 及格及格 else 不及格不及格endfrom sc等級等級=列名列名別名別名3.字符串函數(shù)字符串函數(shù) (

15、1)字符轉(zhuǎn)換函數(shù))字符轉(zhuǎn)換函數(shù) ASCII(字符表達(dá)式)(字符表達(dá)式) 返回字符表達(dá)式最左端字符的返回字符表達(dá)式最左端字符的ASCII 碼值碼值 CHAR (整數(shù)表達(dá)式)(整數(shù)表達(dá)式) CHAR函數(shù)用于將函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符碼轉(zhuǎn)換為字符 LOWER (字符表達(dá)式)(字符表達(dá)式) LOWER函數(shù)用于把字符串全部轉(zhuǎn)換為小寫函數(shù)用于把字符串全部轉(zhuǎn)換為小寫 UPPER (字符表達(dá)式)(字符表達(dá)式) UPPER函數(shù)用于把字符串全部轉(zhuǎn)換為大寫函數(shù)用于把字符串全部轉(zhuǎn)換為大寫 STR( 浮點(diǎn)數(shù)浮點(diǎn)數(shù) ,返回字符串長度返回字符串長度 , 小數(shù)位數(shù)小數(shù)位數(shù)) STR函數(shù)用于把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)

16、據(jù)函數(shù)用于把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù) 小數(shù)位數(shù)超出部分進(jìn)行四舍五入小數(shù)位數(shù)超出部分進(jìn)行四舍五入 小數(shù)點(diǎn)也計(jì)算長度小數(shù)點(diǎn)也計(jì)算長度例,將所有學(xué)生的成績例,將所有學(xué)生的成績score四舍五入得到的整數(shù)四舍五入得到的整數(shù)轉(zhuǎn)換為字符串轉(zhuǎn)換為字符串 select sno, from sc (2)去空格函數(shù)去空格函數(shù)LTRIM (字符串)(字符串) LTRIM函數(shù)用于把字符串頭部的空格去掉。函數(shù)用于把字符串頭部的空格去掉。 RTRIM (字符串)(字符串) RTRIM函數(shù)用于把字符串尾部的空格去掉函數(shù)用于把字符串尾部的空格去掉 。 str(score, 2, 0)(3)取子串函數(shù))取子串函數(shù) LEFT(

17、字符串(字符串, 整數(shù)整數(shù)n) 返回的子串是從字符串最左邊起到第返回的子串是從字符串最左邊起到第n個(gè)字符個(gè)字符的部分。的部分。 RIGHT(字符串(字符串, 整數(shù)整數(shù)n) 返回的子串是從字符串右邊第返回的子串是從字符串右邊第n個(gè)字符起到最個(gè)字符起到最后一個(gè)字符的部分。后一個(gè)字符的部分。 SUBSTRING (字符串字符串, 起始位置起始位置, 長度長度)4.顯式數(shù)據(jù)類型轉(zhuǎn)換函數(shù)顯式數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 常用的類型轉(zhuǎn)換有以下幾種情況:常用的類型轉(zhuǎn)換有以下幾種情況:日期型日期型字符型字符型數(shù)值型數(shù)值型字符型字符型(1) CAST(表達(dá)式表達(dá)式 AS 類型類型(長度長度) )(2) CONVERT(類型

18、類型(長度長度),表達(dá)式,表達(dá)式,style)只能轉(zhuǎn)換為系統(tǒng)提供的基本類型只能轉(zhuǎn)換為系統(tǒng)提供的基本類型例例5.31 在在S表將表將age列的值轉(zhuǎn)換為列的值轉(zhuǎn)換為char(20)Select from Scast(age as char(20)convert(char(20), age) 使用使用convert函數(shù)的函數(shù)的style選項(xiàng)可以用不同的格選項(xiàng)可以用不同的格式顯示日期和時(shí)間式顯示日期和時(shí)間Style取值不同輸出的時(shí)間格式不同,見表取值不同輸出的時(shí)間格式不同,見表7.2例,取系統(tǒng)時(shí)間,并將其以字符串例,取系統(tǒng)時(shí)間,并將其以字符串“dd/mm/yy”形式輸出形式輸出select from

19、s(3) COALESCE函數(shù)函數(shù)返回參數(shù)中返回參數(shù)中第一個(gè)非空表達(dá)式的值第一個(gè)非空表達(dá)式的值,如果所,如果所有表達(dá)式值均為空,則返回有表達(dá)式值均為空,則返回null格式格式 COALESCE(表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2)所有表達(dá)式必須是相同類型所有表達(dá)式必須是相同類型convert(varchar, getdate( ), 3)5.日期函數(shù)日期函數(shù) 日期時(shí)間函數(shù)可用在日期時(shí)間函數(shù)可用在SELECT語句的選擇列語句的選擇列表或表或WHERE子句中子句中(8) GETDATE函數(shù)函數(shù)按標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前系統(tǒng)日期和時(shí)間。按標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前系統(tǒng)日期和時(shí)間。格式:格式: GETDATE()

20、()返回值類型為返回值類型為datetime, 如如2012-04-14 14:44:15.890(1)DAY(日期表達(dá)式)(日期表達(dá)式)DAY函數(shù)返回日期表達(dá)式中的日期值。函數(shù)返回日期表達(dá)式中的日期值。 (2)MONTH(日期表達(dá)式)(日期表達(dá)式)MONTH函數(shù)返回日期表達(dá)式中的月份值。函數(shù)返回日期表達(dá)式中的月份值。 (3)YEAR(日期表達(dá)式)(日期表達(dá)式)YEAR函數(shù)返回日期表達(dá)式中的年份值。函數(shù)返回日期表達(dá)式中的年份值。(7)DATEPART(datepart,日期),日期)以以整數(shù)值整數(shù)值的形式返回日期的的形式返回日期的datepart指定部指定部分,分, datepart取值見表取

21、值見表7.3例如,返回當(dāng)前月份例如,返回當(dāng)前月份select datepart(month, getdate( ) from S7.2 存儲(chǔ)過程存儲(chǔ)過程 7.2.1 存儲(chǔ)過程的概念、優(yōu)點(diǎn)及分類存儲(chǔ)過程的概念、優(yōu)點(diǎn)及分類1.概述概述T-SQL的執(zhí)行過程的執(zhí)行過程程序調(diào)用程序調(diào)用編譯編譯執(zhí)行執(zhí)行每次調(diào)用都進(jìn)行編譯,逐句執(zhí)行,效率低下每次調(diào)用都進(jìn)行編譯,逐句執(zhí)行,效率低下2.存儲(chǔ)過程的概念存儲(chǔ)過程的概念存儲(chǔ)過程是一組為了完成特定功能的存儲(chǔ)過程是一組為了完成特定功能的SQL語句,語句,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,可被其他程序調(diào)用,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,可被其他程序調(diào)用,可以傳遞參數(shù)可以傳遞參數(shù)存儲(chǔ)過程的

22、優(yōu)點(diǎn)存儲(chǔ)過程的優(yōu)點(diǎn) :模塊化的程序設(shè)計(jì)模塊化的程序設(shè)計(jì) 高效率的執(zhí)行高效率的執(zhí)行 第一次執(zhí)行后存儲(chǔ)在服務(wù)器內(nèi)存中,以后再第一次執(zhí)行后存儲(chǔ)在服務(wù)器內(nèi)存中,以后再調(diào)用無需編譯調(diào)用無需編譯減少網(wǎng)絡(luò)流量減少網(wǎng)絡(luò)流量 可以作為安全機(jī)制使用可以作為安全機(jī)制使用 7.2.2 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程 (1)系統(tǒng)存儲(chǔ)過程)系統(tǒng)存儲(chǔ)過程系統(tǒng)定義,用戶調(diào)用系統(tǒng)定義,用戶調(diào)用存儲(chǔ)在存儲(chǔ)在master數(shù)據(jù)庫中,以數(shù)據(jù)庫中,以“sp_”開頭開頭(2)用戶自定義存儲(chǔ)過程)用戶自定義存儲(chǔ)過程(3)擴(kuò)展存儲(chǔ)過程)擴(kuò)展存儲(chǔ)過程7.2.2 創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程 當(dāng)創(chuàng)建存儲(chǔ)過程時(shí),需要確定存儲(chǔ)過程的三當(dāng)創(chuàng)建存儲(chǔ)過程時(shí),需要確定

23、存儲(chǔ)過程的三個(gè)組成部分:個(gè)組成部分:(1)輸入?yún)?shù)和輸出)輸入?yún)?shù)和輸出參數(shù)參數(shù)。(2)數(shù)據(jù)庫的)數(shù)據(jù)庫的操作語句操作語句,包括調(diào)用其他存儲(chǔ),包括調(diào)用其他存儲(chǔ)過程的語句。過程的語句。(3)返回狀態(tài)值返回狀態(tài)值以指明調(diào)用是成功還是失敗以指明調(diào)用是成功還是失敗創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程CREATE PROCEDURE 存儲(chǔ)過程名存儲(chǔ)過程名 ; 編號編號 參數(shù)參數(shù)1 數(shù)據(jù)類型數(shù)據(jù)類型 VARYING = 默認(rèn)值默認(rèn)值 OUTPUT ,.n WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION FOR REPLICATION AS SQL語句語句 .n

24、 每次執(zhí)行都每次執(zhí)行都重新編譯重新編譯加密加密syscomment表表與與WITHRECOMPILE 不兼容不兼容例例7-11 在在test數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為MyProc的不帶參數(shù)的存儲(chǔ)過程,該存儲(chǔ)過程的不帶參數(shù)的存儲(chǔ)過程,該存儲(chǔ)過程的功能是從數(shù)據(jù)表的功能是從數(shù)據(jù)表S中查詢所有男同學(xué)的信息中查詢所有男同學(xué)的信息CREATE PROCEDURE SELECT * FROM S WHERE sex=男男 MyProc AS例例7-12 定義具有參數(shù)的存儲(chǔ)過程。在定義具有參數(shù)的存儲(chǔ)過程。在test數(shù)據(jù)數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為庫中,創(chuàng)建一個(gè)名稱為InsertRecord的

25、存儲(chǔ)過的存儲(chǔ)過程,該存儲(chǔ)過程的功能是向程,該存儲(chǔ)過程的功能是向S數(shù)據(jù)表中插入一條數(shù)據(jù)表中插入一條記錄,新記錄的值由參數(shù)提供。記錄,新記錄的值由參數(shù)提供。CREATE PROCEDURE InsertRecord sn char(20), age numeric(5), sex char(2), dept char(10) )ASINSERT INTO S VALUES= 無無(sno, sn, age, sex, dept) (sno char(6),練習(xí):創(chuàng)建存儲(chǔ)過程練習(xí):創(chuàng)建存儲(chǔ)過程avgselect ,在表,在表S(SNo,SN) 和表和表SC(SNo,CNo,Score)中查詢中查詢“

26、錢爾錢爾” 的平均成績的平均成績create procedure avgselect as select avg(score) from s join sc on s.sno=sc.sno where sn=錢爾錢爾7.2.6 存儲(chǔ)過程的執(zhí)行存儲(chǔ)過程的執(zhí)行Execute 存儲(chǔ)過程名存儲(chǔ)過程名;編號編號 參數(shù)名參數(shù)名1=參數(shù)值參數(shù)值1,參數(shù)名參數(shù)名2=參數(shù)值參數(shù)值2With Recompile例例7-18 調(diào)用調(diào)用test數(shù)據(jù)庫中的存儲(chǔ)過程數(shù)據(jù)庫中的存儲(chǔ)過程MyProcExecute MyProc例例7-19 調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程InsertRecord, 插入記錄插入記錄(S20,張分張分

27、,20,男男,計(jì)算機(jī)計(jì)算機(jī))Execute InsertRecord sno=S7, sn=張分張分, sex=男男, age=20, dept=計(jì)算機(jī)計(jì)算機(jī)練習(xí):調(diào)用存儲(chǔ)過程練習(xí):調(diào)用存儲(chǔ)過程avgselectExec avgselect注意參數(shù)的注意參數(shù)的順序順序Execute InsertRecord S7, 張分張分, 男男, 20,計(jì)算機(jī)計(jì)算機(jī)練習(xí):創(chuàng)建存儲(chǔ)過程練習(xí):創(chuàng)建存儲(chǔ)過程avgselect2, 在表在表SC(SNo,CNo,Score)中根據(jù)學(xué)號和課程號查詢中根據(jù)學(xué)號和課程號查詢成績成績 create procedure avgselect2(n1 char(10), n2

28、char(10) ) as select score from sc where sno=n1 and cno=n2 調(diào)用存儲(chǔ)過程,查詢調(diào)用存儲(chǔ)過程,查詢S1學(xué)生學(xué)生C1課的成績課的成績Exec avgselect2 n1=S1, n2=C1查詢查詢S1學(xué)生學(xué)生C1和和C2課程的平均成績課程的平均成績 Exec avgselect2 n1=S1, n2=C2如何將分?jǐn)?shù)返回并保存如何將分?jǐn)?shù)返回并保存在變量中?在變量中?從存儲(chǔ)過程返回值從存儲(chǔ)過程返回值存儲(chǔ)過程不能通過名稱返回值,使用存儲(chǔ)過程不能通過名稱返回值,使用OUTPUT類型參數(shù)類型參數(shù)(輸出參數(shù))(輸出參數(shù))功能:將參數(shù)值由存儲(chǔ)過程返回給主

29、程序功能:將參數(shù)值由存儲(chǔ)過程返回給主程序 create procedure avgselect3(n1 char(10), n2 char(10) , ) as select score from sc where sno=n1 and cno=n2 s numeric(2) output s=調(diào)用調(diào)用 Declare a numeric(2), b numeric(2)Execute avgselect3 S1, C1Execute avgselect3 S1, C2, b outputselect (a+b)/2, a output例例7-14 定義能夠返回值的存儲(chǔ)過程。在定義能夠返回值的

30、存儲(chǔ)過程。在Teach數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為QueryTeach的存儲(chǔ)過程。該存儲(chǔ)過程的功能是從數(shù)據(jù)表的存儲(chǔ)過程。該存儲(chǔ)過程的功能是從數(shù)據(jù)表S中根據(jù)學(xué)號查詢同學(xué)的姓名和系別,查詢的結(jié)中根據(jù)學(xué)號查詢同學(xué)的姓名和系別,查詢的結(jié)果由參數(shù)果由參數(shù)sn1和和dept1返回。返回。CREATE PROCEDURE QueryTeach (sno char(6), sn1 char(20) OUTPUT, dept1 char(10) OUTPUT)ASSELECT sn1=SN, dept1=Dept FROM SWHERE SNo=sno例例7-20 調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程Q

31、ueryTeach,查詢,查詢S1學(xué)生的姓名和系學(xué)生的姓名和系Declare s char(10), d char(20)Exec QueryTeach S1, s output, d outputSelect 姓名姓名=s, 系別系別=d使用企業(yè)管理器創(chuàng)建存儲(chǔ)過程使用企業(yè)管理器創(chuàng)建存儲(chǔ)過程7.2.3 查看存儲(chǔ)過程代碼查看存儲(chǔ)過程代碼企業(yè)管理器企業(yè)管理器執(zhí)行存儲(chǔ)過程執(zhí)行存儲(chǔ)過程 Exec sp_helptext 存儲(chǔ)過程名存儲(chǔ)過程名7.2.4 重命名重命名執(zhí)行存儲(chǔ)過程執(zhí)行存儲(chǔ)過程 Exec sp_rename 原名,新名原名,新名7.2.5 刪除刪除Drop 存儲(chǔ)過程名存儲(chǔ)過程名7.2.7 修

32、改修改Alter Procedure 存儲(chǔ)過程名存儲(chǔ)過程名與創(chuàng)建方法相同與創(chuàng)建方法相同SQL Server 2000數(shù)據(jù)庫連接方法數(shù)據(jù)庫連接方法1.ODBC開放數(shù)據(jù)庫互連(開放數(shù)據(jù)庫互連(Open Database Connectivity,ODBC)是微軟公司開放服)是微軟公司開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個(gè)組成部分,它建務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些(應(yīng)用程序編程接口)。這些API利用利用SQL來完成其大部分任務(wù)。來完成其大部分任務(wù)。ODBC本身也提供了對本身也提供

33、了對SQL語言的支持,用語言的支持,用戶可以直接將戶可以直接將SQL語句送給語句送給ODBC 建立建立ODBC數(shù)據(jù)源數(shù)據(jù)源控制面板控制面板管理工具管理工具ODBC數(shù)據(jù)源數(shù)據(jù)源使用使用VB+ODBC連接連接SQL Server 2000 strConn = UID=sa;PWD=sa;DSN=my Set conn = CreateObject(ADODB.Connection) conn.open strConn Set rs = CreateObject(ADODB.Recordset) sql = select * from s; Set rs = conn.execute(sql) Do

34、 While Not rs.EOF Print rs.fields(0).Value Print rs.movenext Loop連接用戶名,密碼,數(shù)據(jù)源名連接用戶名,密碼,數(shù)據(jù)源名2.JDBCJDBC(Java Data Base Connectivity, java數(shù)數(shù)據(jù)庫連接)是一種用于執(zhí)行據(jù)庫連接)是一種用于執(zhí)行SQL語句的語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用它由一組用Java語言編寫的類和接口組成語言編寫的類和接口組成使用使用JDBC連接連接SQL Serer 2000import java.sql.*;public

35、class Example12_10 public static void main(String args) Connection con; PreparedStatement pre; ResultSet rs; tryClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); catch(ClassNotFoundException e)System.out.println(+e);JDBC的的SQL Server驅(qū)動(dòng)驅(qū)動(dòng)try String uri=jdbc:microsoft:sqlserver:/localhost:14

36、33; DatabaseName=test;String user=sa;String password=sa;con=DriverManager.getConnection(uri,user,password);pre=con.prepareStatement(select * from s);rs=pre.executeQuery( );while(rs.next() String number=rs.getString(1); System.out.println(number); con.close( ); catch(SQLException e) System.out.printl

37、n(e); SQL Server地址和端口,數(shù)據(jù)庫名地址和端口,數(shù)據(jù)庫名用戶名,密碼用戶名,密碼連接連接明天上機(jī)帶明天上機(jī)帶 JAVA課本課本創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程CREATE PROCEDURE 存儲(chǔ)過程名存儲(chǔ)過程名 參數(shù)參數(shù)1 數(shù)據(jù)類型數(shù)據(jù)類型, 參數(shù)參數(shù)2 數(shù)據(jù)類型數(shù)據(jù)類型 AS SQL語句語句 .n 存儲(chǔ)過程的執(zhí)行存儲(chǔ)過程的執(zhí)行Execute 存儲(chǔ)過程名存儲(chǔ)過程名 參數(shù)名參數(shù)名1=參數(shù)值參數(shù)值1,參數(shù)名參數(shù)名2=參數(shù)值參數(shù)值2注意參數(shù)的注意參數(shù)的個(gè)數(shù)和順序個(gè)數(shù)和順序作業(yè)作業(yè)1.創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程mypro1,功能為查詢所有男同,功能為查詢所有男同學(xué)的姓名學(xué)的姓名SN,選修課程名

38、,選修課程名CN和成績和成績score判斷是否需要參數(shù)判斷是否需要參數(shù)create procedure mypro1asselect sn,cn,score from s,sc,c where s.sno=sc.sno and o=o and sex=男男2.調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程mypro1,查看輸出結(jié)果,查看輸出結(jié)果Execute mypro1Select語句具有語句具有將記錄集將記錄集顯示顯示在在前臺(tái)的功能前臺(tái)的功能3.創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程mypro2,功能為根據(jù)學(xué)生姓名,功能為根據(jù)學(xué)生姓名SN,統(tǒng)計(jì)該學(xué)生選修的課程數(shù)量,統(tǒng)計(jì)該學(xué)生選修的課程數(shù)量將學(xué)生姓名作為參數(shù)將學(xué)生姓名作為參數(shù)

39、create procedure mypro2(a varchar(20)asselect count(*) from s join sc on s.sno=sc.sno4.調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程mypro2,輸出,輸出“孫珊孫珊”選修的選修的課程數(shù)課程數(shù)execute mypro2 孫珊孫珊a,where sn=a練習(xí):創(chuàng)建存儲(chǔ)過程練習(xí):創(chuàng)建存儲(chǔ)過程avgselect2, 在表在表SC(SNo,CNo,Score)中根據(jù)學(xué)號和課程號查詢中根據(jù)學(xué)號和課程號查詢成績成績 create procedure avgselect2(n1 char(10), n2 char(10) ) as sele

40、ct score from sc where sno=n1 and cno=n2 調(diào)用存儲(chǔ)過程,查詢調(diào)用存儲(chǔ)過程,查詢S1學(xué)生學(xué)生C1課的成績課的成績Exec avgselect2 n1=S1, n2=C1查詢查詢S1學(xué)生學(xué)生C1和和C2課程的平均成績課程的平均成績 Exec avgselect2 n1=S1, n2=C2如何將分?jǐn)?shù)返回并保存如何將分?jǐn)?shù)返回并保存在變量中?在變量中?從存儲(chǔ)過程返回值從存儲(chǔ)過程返回值存儲(chǔ)過程不能通過名稱返回值,使用存儲(chǔ)過程不能通過名稱返回值,使用OUTPUT類型參數(shù)類型參數(shù)(輸出參數(shù))(輸出參數(shù))功能:將參數(shù)值由存儲(chǔ)過程返回給主程序功能:將參數(shù)值由存儲(chǔ)過程返回給主

41、程序 create procedure avgselect3(n1 char(10), n2 char(10) , ) as select score from sc where sno=n1 and cno=n2 s numeric(2) output s=調(diào)用調(diào)用 Declare a numeric(2), b numeric(2)Execute avgselect3 S1, C1Execute avgselect3 S1, C2, b outputselect (a+b)/2, a output例例7-14 定義能夠返回值的存儲(chǔ)過程。在定義能夠返回值的存儲(chǔ)過程。在Teach數(shù)據(jù)庫中,創(chuàng)建

42、一個(gè)名稱為數(shù)據(jù)庫中,創(chuàng)建一個(gè)名稱為QueryTeach的存儲(chǔ)過程。該存儲(chǔ)過程的功能是從數(shù)據(jù)表的存儲(chǔ)過程。該存儲(chǔ)過程的功能是從數(shù)據(jù)表S中根據(jù)學(xué)號查詢同學(xué)的姓名和系別,查詢的結(jié)中根據(jù)學(xué)號查詢同學(xué)的姓名和系別,查詢的結(jié)果由參數(shù)果由參數(shù)sn1和和dept1返回。返回。CREATE PROCEDURE QueryTeach (sno char(6), sn1 char(20) OUTPUT, dept1 char(10) OUTPUT)ASSELECT sn1=SN, dept1=Dept FROM SWHERE SNo=sno例例7-20 調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程QueryTeach,查詢,查詢S1學(xué)

43、生的姓名和系學(xué)生的姓名和系Declare s char(10), d char(20)Exec QueryTeach S1, s output, d outputSelect 姓名姓名=s, 系別系別=d練習(xí):創(chuàng)建存儲(chǔ)過程練習(xí):創(chuàng)建存儲(chǔ)過程myproc。通過調(diào)用該存。通過調(diào)用該存儲(chǔ)過程,計(jì)算在儲(chǔ)過程,計(jì)算在S表中男女同學(xué)平均年齡的差表中男女同學(xué)平均年齡的差創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程create procedure myprocc(x varchar(2), c decimal output)asSelect c=avg(age) from s where sex=x調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程dec

44、lare mavg decimal, favg decimalexecute myprocc 男男, mavg outputexecute myprocc 女女, favg outputSelect mavg - favg7.2.3 查看存儲(chǔ)過程代碼查看存儲(chǔ)過程代碼企業(yè)管理器企業(yè)管理器Exec sp_helptext 存儲(chǔ)過程名存儲(chǔ)過程名7.2.4 重命名重命名Exec sp_rename 原名,新名原名,新名7.2.5 刪除刪除Drop 存儲(chǔ)過程名存儲(chǔ)過程名7.2.7 修改修改Alter Procedure 存儲(chǔ)過程名存儲(chǔ)過程名與創(chuàng)建方法相同與創(chuàng)建方法相同7.3 觸發(fā)器觸發(fā)器 7.3.1 觸

45、發(fā)器的概念、分類與作用觸發(fā)器的概念、分類與作用 觸發(fā)器是一種特殊類型的存儲(chǔ)過程。觸發(fā)器是一種特殊類型的存儲(chǔ)過程。 觸發(fā)器是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,不觸發(fā)器是通過事件進(jìn)行觸發(fā)而被執(zhí)行的,不是通過名字而被直接調(diào)用。是通過名字而被直接調(diào)用。 觸發(fā)器有觸發(fā)器有4個(gè)要素:個(gè)要素:名稱:觸發(fā)器名稱。名稱:觸發(fā)器名稱。定義的目標(biāo):觸發(fā)器必須定義在表或者視定義的目標(biāo):觸發(fā)器必須定義在表或者視圖上。圖上。觸發(fā)條件:是觸發(fā)條件:是UPDATE、INSERT還是還是DELETE語句。語句。觸發(fā)邏輯:觸發(fā)之后如何處理。觸發(fā)邏輯:觸發(fā)之后如何處理。 觸發(fā)器的種類觸發(fā)器的種類(1)AFTER觸發(fā)器觸發(fā)器 在某一操作(

46、在某一操作(INSERT、UPDATE、DELETE)執(zhí)行之后,觸發(fā)器被觸發(fā)執(zhí)行)執(zhí)行之后,觸發(fā)器被觸發(fā)執(zhí)行 (2)INSTEAD OF觸發(fā)器觸發(fā)器 在執(zhí)行某一操作(在執(zhí)行某一操作(INSERT、UPDATE、DELETE)前,觸發(fā)器被觸發(fā),用觸發(fā)器的)前,觸發(fā)器被觸發(fā),用觸發(fā)器的操作來代替要執(zhí)行的操作。操作來代替要執(zhí)行的操作。 INSERT、UPDATE、DELETE操作不被執(zhí)操作不被執(zhí)行,而執(zhí)行的是觸發(fā)器的語句內(nèi)容。行,而執(zhí)行的是觸發(fā)器的語句內(nèi)容。可用于更新多表視圖可用于更新多表視圖強(qiáng)化約束強(qiáng)化約束 跟蹤變化跟蹤變化 存儲(chǔ)過程的調(diào)用存儲(chǔ)過程的調(diào)用 級聯(lián)運(yùn)行級聯(lián)運(yùn)行 觸發(fā)器的作用觸發(fā)器的作用

47、在不能在視圖或臨時(shí)表上創(chuàng)建觸發(fā)器在不能在視圖或臨時(shí)表上創(chuàng)建觸發(fā)器一個(gè)觸發(fā)器只能對應(yīng)一個(gè)表一個(gè)觸發(fā)器只能對應(yīng)一個(gè)表TRUNCATE TABLE語句沒有被記入日志,語句沒有被記入日志,不能觸發(fā)不能觸發(fā)DELETE型觸發(fā)器。型觸發(fā)器。每條每條SQL語句只激活觸發(fā)器一次語句只激活觸發(fā)器一次7.3.3 創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器 格式格式Create Trigger 觸發(fā)器名觸發(fā)器名On 表名表名 With EncryptionFor| After| Instead OfDelete,Insert,UpdateAs操作語句操作語句例,在向例,在向S表中插入記錄后,輸出一句話表中插入記錄后,輸出一句話S表表已經(jīng)

48、更新!已經(jīng)更新!創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器create trigger myon sfor insertasprint S表已經(jīng)更新!表已經(jīng)更新!插入記錄插入記錄insert into s values(S8,張三張三,男男,20,計(jì)算機(jī)計(jì)算機(jī))插入成功,觸發(fā)器觸發(fā)插入成功,觸發(fā)器觸發(fā)練習(xí):練習(xí): 創(chuàng)建一個(gè)觸發(fā)器,當(dāng)從創(chuàng)建一個(gè)觸發(fā)器,當(dāng)從S表中刪除一條表中刪除一條記錄后,顯示記錄后,顯示S表中的全部記錄表中的全部記錄CREATE TRIGGER ChangeDisplayON S FOR deleteASSELECT * FROM S使用系統(tǒng)存儲(chǔ)過程查看觸發(fā)器使用系統(tǒng)存儲(chǔ)過程查看觸發(fā)器 EXEC s

49、p_help 觸發(fā)器名觸發(fā)器名 例,替代觸發(fā)器例,替代觸發(fā)器不允許更新不允許更新S表,如果試圖執(zhí)行表,如果試圖執(zhí)行insert,則輸,則輸出一句話出一句話S表不允許更新!表不允許更新!create trigger my1 on sinstead of insertasprint S表不允許更新!表不允許更新!插入記錄插入記錄insert into s values(S9,李四李四,男男,20,計(jì)算機(jī)計(jì)算機(jī))觸發(fā)器觸發(fā),插入失敗觸發(fā)器觸發(fā),插入失敗修改觸發(fā)器修改觸發(fā)器 使用使用sp_rename修改觸發(fā)器的名字修改觸發(fā)器的名字sp_rename oldname, newname 通過通過ALTE

50、R TRIGGER命令修改觸發(fā)器正文命令修改觸發(fā)器正文ALTER TRIGGER trigger_name 。刪除觸發(fā)器刪除觸發(fā)器 DROP TRIGGER 觸發(fā)器名觸發(fā)器名刪除觸發(fā)器所在的表時(shí),刪除觸發(fā)器所在的表時(shí),SQL Server將自動(dòng)刪將自動(dòng)刪除與該表相關(guān)的觸發(fā)器。除與該表相關(guān)的觸發(fā)器。7.3.2 觸發(fā)器的工作原理觸發(fā)器的工作原理 SQL Server在工作時(shí)為每個(gè)觸發(fā)器在服務(wù)器的在工作時(shí)為每個(gè)觸發(fā)器在服務(wù)器的內(nèi)存上建立兩個(gè)特殊的表:插入表和刪除表內(nèi)存上建立兩個(gè)特殊的表:插入表和刪除表這兩個(gè)表由系統(tǒng)維護(hù),用戶不能修改,但可是這兩個(gè)表由系統(tǒng)維護(hù),用戶不能修改,但可是讀取。讀取。觸發(fā)器工

51、作完成后,這兩表也被刪掉觸發(fā)器工作完成后,這兩表也被刪掉(1)插入表()插入表(Inserted表表)一旦對創(chuàng)建了一旦對創(chuàng)建了Insert觸發(fā)器的某個(gè)表執(zhí)行了插入觸發(fā)器的某個(gè)表執(zhí)行了插入操作,那么對該表插入的所有行來說,都有一操作,那么對該表插入的所有行來說,都有一個(gè)相應(yīng)的副本存放到個(gè)相應(yīng)的副本存放到Inserted表中,即表中,即Inserted表用來存儲(chǔ)插入的內(nèi)容。表用來存儲(chǔ)插入的內(nèi)容。 (2)刪除表)刪除表(Deleted表)表)的功能的功能一旦對表執(zhí)行了刪除操作,則所有的刪除行一旦對表執(zhí)行了刪除操作,則所有的刪除行移動(dòng)移動(dòng)至至Deleted表中,表中,這樣做的目的是,一旦觸發(fā)器遇到了強(qiáng)

52、迫它這樣做的目的是,一旦觸發(fā)器遇到了強(qiáng)迫它中止的語句被執(zhí)行時(shí),刪除的那些行可以從中止的語句被執(zhí)行時(shí),刪除的那些行可以從Deleted表中得以還原表中得以還原更新更新更新操作:先刪除再插入更新操作:先刪除再插入游游標(biāo)是開辟的內(nèi)存空間,用于存放從數(shù)據(jù)表標(biāo)是開辟的內(nèi)存空間,用于存放從數(shù)據(jù)表中查詢出來的記錄集或中查詢出來的記錄集或SQL語句執(zhí)行后的結(jié)語句執(zhí)行后的結(jié)果集。果集。游標(biāo)有一個(gè)指針,最初指向查詢結(jié)果的首部,游標(biāo)有一個(gè)指針,最初指向查詢結(jié)果的首部,隨著游標(biāo)指針的推進(jìn),就可以訪問相應(yīng)的記隨著游標(biāo)指針的推進(jìn),就可以訪問相應(yīng)的記錄。錄。補(bǔ)充內(nèi)容:補(bǔ)充內(nèi)容: 游標(biāo)游標(biāo)001張紅張紅網(wǎng)絡(luò)網(wǎng)絡(luò)1班班002宋

53、佳佳宋佳佳 網(wǎng)絡(luò)網(wǎng)絡(luò)1班班003王楚王楚網(wǎng)絡(luò)網(wǎng)絡(luò)1班班004田宇樂田宇樂 網(wǎng)絡(luò)網(wǎng)絡(luò)1班班001 張紅張紅網(wǎng)絡(luò)網(wǎng)絡(luò)1班班myc 游標(biāo)使用的步驟游標(biāo)使用的步驟聲明,打開,讀取,關(guān)閉,刪除聲明,打開,讀取,關(guān)閉,刪除聲明游標(biāo)聲明游標(biāo)以以T-SQL擴(kuò)展為例擴(kuò)展為例游標(biāo)名游標(biāo)名Select語句語句例如:例如: 定義游標(biāo)定義游標(biāo)stucurs2,內(nèi)容為,內(nèi)容為s表中管理表中管理專業(yè)學(xué)生信息專業(yè)學(xué)生信息Declare stucurs2 Cursor Dynamic for select * from s where dept=管理管理Local|Global:游標(biāo)作用域:游標(biāo)作用域1.Local:局部游標(biāo),

54、作用域?yàn)閯?chuàng)建該游標(biāo)的數(shù):局部游標(biāo),作用域?yàn)閯?chuàng)建該游標(biāo)的數(shù)據(jù)庫對象,類似于局部變量據(jù)庫對象,類似于局部變量2.Global:全局游標(biāo),創(chuàng)建后執(zhí)行的任何處理:全局游標(biāo),創(chuàng)建后執(zhí)行的任何處理中均可使用中均可使用Forward_only|Scroll:游標(biāo)指針移動(dòng)方向:游標(biāo)指針移動(dòng)方向1.Forward_only:游標(biāo)指針只能從第一行向最:游標(biāo)指針只能從第一行向最后一行推進(jìn)后一行推進(jìn)2.Scroll:指針可以向前和向后推進(jìn):指針可以向前和向后推進(jìn)Static|Dynamic|Keyset|Fast_Forward用于定用于定義游標(biāo)的類型義游標(biāo)的類型1.Static:靜態(tài)游標(biāo),游標(biāo)打開后,其結(jié)果集不:靜

55、態(tài)游標(biāo),游標(biāo)打開后,其結(jié)果集不再受數(shù)據(jù)庫更新的影響而更新。使游標(biāo)中的再受數(shù)據(jù)庫更新的影響而更新。使游標(biāo)中的數(shù)據(jù)不受其他用戶的影響數(shù)據(jù)不受其他用戶的影響2. Dynamic:動(dòng)態(tài)游標(biāo),游標(biāo)打開后,結(jié)果集:動(dòng)態(tài)游標(biāo),游標(biāo)打開后,結(jié)果集隨著數(shù)據(jù)庫的更新而更新。若游標(biāo)移動(dòng)方向隨著數(shù)據(jù)庫的更新而更新。若游標(biāo)移動(dòng)方向?yàn)闉镕orward_only,則默認(rèn)為動(dòng)態(tài)游標(biāo),則默認(rèn)為動(dòng)態(tài)游標(biāo)3. Fast_Forward:快速只進(jìn)游標(biāo),結(jié)果集會(huì)隨:快速只進(jìn)游標(biāo),結(jié)果集會(huì)隨著數(shù)據(jù)庫的更新而更新,但游標(biāo)指針只能從著數(shù)據(jù)庫的更新而更新,但游標(biāo)指針只能從前向后移動(dòng)提取數(shù)據(jù)。前向后移動(dòng)提取數(shù)據(jù)。5.Fast_Forward不能

56、與不能與Scroll和和Forward_only同同時(shí)設(shè)置時(shí)設(shè)置6. Static|Dynamic|Keyset類型游標(biāo)默認(rèn)的移動(dòng)參類型游標(biāo)默認(rèn)的移動(dòng)參數(shù)為數(shù)為Scroll, Fast_Forward默認(rèn)為默認(rèn)為Forward_onlyType_Waring:警告:警告如果游標(biāo)的類型發(fā)生了隱形轉(zhuǎn)換,則給客戶端如果游標(biāo)的類型發(fā)生了隱形轉(zhuǎn)換,則給客戶端發(fā)送警告發(fā)送警告Select語句語句用于產(chǎn)生游標(biāo)的結(jié)果集。用于產(chǎn)生游標(biāo)的結(jié)果集。Select語句中不能出現(xiàn)語句中不能出現(xiàn)Compute,into和和for BrowseFor Update of 列名列名1,列名,列名2:指出游標(biāo)中可以修改的列,若未

57、指出列名,則指出游標(biāo)中可以修改的列,若未指出列名,則可以修改所有列。不能與可以修改所有列。不能與Static同時(shí)設(shè)置同時(shí)設(shè)置 例例4.24 定義局部游標(biāo)定義局部游標(biāo)xs_cur2,結(jié)果集為,結(jié)果集為xs表中表中借書數(shù)大于借書數(shù)大于5的記錄,要求游標(biāo)指針可以向前的記錄,要求游標(biāo)指針可以向前和向后移動(dòng),游標(biāo)數(shù)據(jù)隨數(shù)據(jù)表更新而更新和向后移動(dòng),游標(biāo)數(shù)據(jù)隨數(shù)據(jù)表更新而更新Declare xs_cur2 cursor localforselect * from XS where 借書數(shù)借書數(shù)5 scrolldynamic4.3.3 打開游標(biāo)打開游標(biāo)Open 游標(biāo)名游標(biāo)名 打開游標(biāo)后,可以使用全局變量打開游

58、標(biāo)后,可以使用全局變量Cursor_Rows 來返回游標(biāo)中記錄的行數(shù),來返回游標(biāo)中記錄的行數(shù),0表示沒有打開,表示沒有打開,-1表示動(dòng)態(tài)游標(biāo),表示動(dòng)態(tài)游標(biāo),例例4.25 打開游標(biāo)打開游標(biāo)xs_cur2,返回記錄行數(shù),返回記錄行數(shù)open xs_cur2select 行數(shù)行數(shù)=cursor_rows4.3.4 讀取數(shù)據(jù)讀取數(shù)據(jù)Fetch 選項(xiàng)選項(xiàng) from 游標(biāo)名游標(biāo)名 Into 變量變量選項(xiàng):選項(xiàng):next|prior|first|last|absolut|relative用于用于說明讀取數(shù)據(jù)的位置說明讀取數(shù)據(jù)的位置1.Next:指針指向當(dāng)前行的下一行,讀取數(shù)據(jù)。:指針指向當(dāng)前行的下一行,讀取

59、數(shù)據(jù)。默認(rèn)的提取選項(xiàng)。默認(rèn)的提取選項(xiàng)。2.Prior:指針指向當(dāng)前行的上一行,讀取數(shù)據(jù):指針指向當(dāng)前行的上一行,讀取數(shù)據(jù)3. First:指針指向第一行,讀取數(shù)據(jù):指針指向第一行,讀取數(shù)據(jù)4. Last:指針指向最后一行,讀取數(shù)據(jù):指針指向最后一行,讀取數(shù)據(jù)5. Absolut - n:指針指向從游標(biāo)指針指向從游標(biāo) (尾尾) 頭開始的第頭開始的第n行,讀取數(shù)行,讀取數(shù)據(jù)據(jù)6. Relative - n|:指針指向當(dāng)前行之指針指向當(dāng)前行之(前前)后的第后的第n行,讀取數(shù)據(jù)行,讀取數(shù)據(jù)prior|first|last|absolut|relative不用于不用于Forward_only類型的游標(biāo)類

60、型的游標(biāo)7.Into 變量名變量名將讀取的游標(biāo)數(shù)據(jù)存放在指定的游標(biāo)變量中將讀取的游標(biāo)數(shù)據(jù)存放在指定的游標(biāo)變量中例例4.26 在游標(biāo)在游標(biāo)xs_cur2中一次讀取第一條數(shù)據(jù),中一次讀取第一條數(shù)據(jù),最后一條數(shù)據(jù),倒數(shù)第最后一條數(shù)據(jù),倒數(shù)第2條數(shù)據(jù),正數(shù)第條數(shù)據(jù),正數(shù)第3條條數(shù)據(jù)數(shù)據(jù)Open xs_cur2Fetch first from xs_cur2 Fetch last from xs_cur2 Fetch prior from xs_cur2 Fetch absolute 3 from xs_cur2 注意:當(dāng)前指針的位置注意:當(dāng)前指針的位置4.3.5 關(guān)閉游標(biāo)關(guān)閉游標(biāo)游標(biāo)使用完以后,要及時(shí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論