




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院第八章 數(shù)據(jù)庫(kù)編程8.1 嵌入式嵌入式SQL8.2 存儲(chǔ)過程存儲(chǔ)過程8.3 ODBC編程編程 數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1 嵌嵌 入入 式式 SQLvSQL語(yǔ)言提供了兩種不同的使用方式:語(yǔ)言提供了兩種不同的使用方式:交互式交互式嵌入式嵌入式將將SQLSQL語(yǔ)句嵌入到其它宿主語(yǔ)言編寫的語(yǔ)句嵌入到其它宿主語(yǔ)言編寫的程序中,作為宿主語(yǔ)
2、言的子語(yǔ)言,使宿主程序中,作為宿主語(yǔ)言的子語(yǔ)言,使宿主語(yǔ)言具備訪問數(shù)據(jù)庫(kù)的能力。語(yǔ)言具備訪問數(shù)據(jù)庫(kù)的能力。宿主語(yǔ)言宿主語(yǔ)言:COBOL, C, Pascal, COBOL, C, Pascal, Fortran, VC+, VB, DEPHI, CBFortran, VC+, VB, DEPHI, CB等等能嵌入能嵌入SQLSQL語(yǔ)句的高級(jí)語(yǔ)言。語(yǔ)句的高級(jí)語(yǔ)言。宿主語(yǔ)言本身不能直接識(shí)別宿主語(yǔ)言本身不能直接識(shí)別SQLSQL語(yǔ)句。語(yǔ)句。 v為什么要引入嵌入式為什么要引入嵌入式SQLnSQL語(yǔ)言是非過程性語(yǔ)言語(yǔ)言是非過程性語(yǔ)言n事務(wù)處理應(yīng)用需要高級(jí)語(yǔ)言事務(wù)處理應(yīng)用需要高級(jí)語(yǔ)言v這兩種方式細(xì)節(jié)上有差別
3、,在程序設(shè)計(jì)的環(huán)境下,這兩種方式細(xì)節(jié)上有差別,在程序設(shè)計(jì)的環(huán)境下,SQL語(yǔ)句要做某些必要的擴(kuò)充。語(yǔ)句要做某些必要的擴(kuò)充。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院把把SQLSQL嵌入到其他高級(jí)語(yǔ)言中,必須解決的三個(gè)問題:嵌入到其他高級(jí)語(yǔ)言中,必須解決的三個(gè)問題:1.1.語(yǔ)句識(shí)別語(yǔ)句識(shí)別如何區(qū)分如何區(qū)分SQLSQL語(yǔ)句和主語(yǔ)言語(yǔ)句。語(yǔ)句和主語(yǔ)言語(yǔ)句。2.2. 數(shù)據(jù)交換數(shù)據(jù)交換由主語(yǔ)言提出的操作或數(shù)據(jù),如何讓數(shù)由主語(yǔ)言提出的操作或數(shù)據(jù),如何讓數(shù)據(jù)庫(kù)管理系統(tǒng)執(zhí)行,由數(shù)據(jù)庫(kù)查詢出的數(shù)據(jù)如何交由據(jù)庫(kù)管
4、理系統(tǒng)執(zhí)行,由數(shù)據(jù)庫(kù)查詢出的數(shù)據(jù)如何交由主語(yǔ)言處理。主語(yǔ)言處理。3.3. 協(xié)調(diào)主語(yǔ)言的單記錄操作和數(shù)據(jù)庫(kù)的集合操作。協(xié)調(diào)主語(yǔ)言的單記錄操作和數(shù)據(jù)庫(kù)的集合操作。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.1 嵌入式嵌入式SQL的處理過程的處理過程對(duì)宿主型數(shù)據(jù)庫(kù)語(yǔ)言對(duì)宿主型數(shù)據(jù)庫(kù)語(yǔ)言SQL(ESQL)SQL(ESQL),DBMSDBMS采用采用預(yù)編譯預(yù)編譯方法處理:方法處理: 1由由DBMS的預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,的預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,識(shí)別出識(shí)別出SQL語(yǔ)句語(yǔ)句 2把它們把它
5、們轉(zhuǎn)換轉(zhuǎn)換成主語(yǔ)言調(diào)用語(yǔ)句,以使主語(yǔ)言成主語(yǔ)言調(diào)用語(yǔ)句,以使主語(yǔ)言編譯程序能識(shí)別它編譯程序能識(shí)別它 3最后由主語(yǔ)言的編譯程序?qū)⒄麄€(gè)源程序最后由主語(yǔ)言的編譯程序?qū)⒄麄€(gè)源程序編譯編譯成目標(biāo)碼。成目標(biāo)碼。主語(yǔ)言程序含主語(yǔ)言程序含ESQLESQL語(yǔ)句語(yǔ)句ESQLESQL語(yǔ)句轉(zhuǎn)換語(yǔ)句轉(zhuǎn)換為函數(shù)調(diào)用為函數(shù)調(diào)用目標(biāo)語(yǔ)言程序目標(biāo)語(yǔ)言程序RDBMSRDBMS的的預(yù)處理程序預(yù)處理程序主語(yǔ)言主語(yǔ)言編譯程序編譯程序ESQLESQL基本處理過程基本處理過程數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.1 嵌入式嵌
6、入式SQL的處理過程的處理過程為了能夠區(qū)分為了能夠區(qū)分SQLSQL語(yǔ)句與主語(yǔ)言語(yǔ)句,所有的語(yǔ)句與主語(yǔ)言語(yǔ)句,所有的SQLSQL語(yǔ)句語(yǔ)句必需要有前綴必需要有前綴EXEC SQL,以以( (;) )結(jié)束結(jié)束, ,嵌入式嵌入式SQLSQL語(yǔ)句的語(yǔ)句的一般形式一般形式 EXEC SQL SQLEXEC SQL ; ;例:例:EXEC SQL DROP TABLE StudentEXEC SQL DROP TABLE Student; ;數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.2 嵌入式嵌入
7、式SQL語(yǔ)句與主語(yǔ)言之間的通信語(yǔ)句與主語(yǔ)言之間的通信將將SQL嵌入到高級(jí)語(yǔ)言中混合編程,程序中會(huì)含有兩種不同計(jì)算嵌入到高級(jí)語(yǔ)言中混合編程,程序中會(huì)含有兩種不同計(jì)算模型的語(yǔ)句。模型的語(yǔ)句。SQL語(yǔ)句語(yǔ)句 描述性的面向集合的語(yǔ)句描述性的面向集合的語(yǔ)句 負(fù)責(zé)操縱數(shù)據(jù)庫(kù)負(fù)責(zé)操縱數(shù)據(jù)庫(kù)高級(jí)語(yǔ)言語(yǔ)句高級(jí)語(yǔ)言語(yǔ)句 過程性的面向記錄的語(yǔ)句過程性的面向記錄的語(yǔ)句 負(fù)責(zé)控制程序流程負(fù)責(zé)控制程序流程嵌入式嵌入式SQLSQL語(yǔ)句與主語(yǔ)言之間的語(yǔ)句與主語(yǔ)言之間的通信通信主要是指:描述性面向集主要是指:描述性面向集合與過程性面向紀(jì)錄(元組)語(yǔ)句之間的通信。合與過程性面向紀(jì)錄(元組)語(yǔ)句之間的通信。 數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系
8、統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院工作單元之間的通信方式工作單元之間的通信方式vSQL通信區(qū)通信區(qū) 向主語(yǔ)言傳遞向主語(yǔ)言傳遞SQL語(yǔ)句的執(zhí)行狀態(tài)信息,主語(yǔ)言能夠據(jù)此控制語(yǔ)句的執(zhí)行狀態(tài)信息,主語(yǔ)言能夠據(jù)此控制程序流程。程序流程。v主變量主變量 1)主語(yǔ)言向)主語(yǔ)言向SQL語(yǔ)句提供參數(shù)。語(yǔ)句提供參數(shù)。 2)將)將SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理。語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理。v 游標(biāo)游標(biāo)解決集合性操作語(yǔ)言與過程性操作語(yǔ)言的不匹配。解決集合性操作語(yǔ)言與過程性操作語(yǔ)言的不匹配。數(shù)據(jù)庫(kù)系統(tǒng)概論
9、數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院一、一、 SQL通信區(qū)通信區(qū)SQLCA: SQL Communication Area是一個(gè)數(shù)據(jù)結(jié)構(gòu)是一個(gè)數(shù)據(jù)結(jié)構(gòu)存放狀態(tài)信息供程序讀取存放狀態(tài)信息供程序讀取 。SQLCA的用途的用途SQL語(yǔ)句執(zhí)行后,語(yǔ)句執(zhí)行后,DBMS反饋給應(yīng)用程序信息反饋給應(yīng)用程序信息 描述系統(tǒng)當(dāng)前工作狀態(tài)描述系統(tǒng)當(dāng)前工作狀態(tài) 描述運(yùn)行環(huán)境描述運(yùn)行環(huán)境這些信息將送到這些信息將送到SQL通信區(qū)通信區(qū)SQLCA中,應(yīng)用程序從中,應(yīng)用程序從SQLCA中取出這些狀中取出這些狀態(tài)信息,據(jù)此決定接下來執(zhí)
10、行的語(yǔ)句態(tài)信息,據(jù)此決定接下來執(zhí)行的語(yǔ)句定義定義SQLCA 用用EXEC SQL INCLUDE SQLCA加以定義加以定義使用使用SQLCASQLCA中有一個(gè)存放每次執(zhí)行中有一個(gè)存放每次執(zhí)行SQL語(yǔ)句后返回代碼的變量語(yǔ)句后返回代碼的變量SQLCODE ;如果如果SQLCODE等于預(yù)定義的常量等于預(yù)定義的常量SUCCESS,則表示,則表示SQL語(yǔ)句成功,語(yǔ)句成功,否則在否則在SQLCODE 存放錯(cuò)誤代碼;存放錯(cuò)誤代碼;應(yīng)用程序每執(zhí)行完一條應(yīng)用程序每執(zhí)行完一條SQL 語(yǔ)句之后都應(yīng)該測(cè)試一下語(yǔ)句之后都應(yīng)該測(cè)試一下SQLCODE的值,的值,以了解該以了解該SQL語(yǔ)句執(zhí)行情況并做相應(yīng)處理。語(yǔ)句執(zhí)行情況
11、并做相應(yīng)處理。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院二、二、 主變量主變量 v什么是主變量什么是主變量 嵌入式嵌入式SQL語(yǔ)句中可以使用主語(yǔ)言的程序變量來輸入或輸出數(shù)據(jù),語(yǔ)句中可以使用主語(yǔ)言的程序變量來輸入或輸出數(shù)據(jù),在在SQL語(yǔ)句中使用的主語(yǔ)言程序變量簡(jiǎn)稱為主變量(語(yǔ)句中使用的主語(yǔ)言程序變量簡(jiǎn)稱為主變量(Host Variable)v主變量的類型主變量的類型輸入主變量輸入主變量-由應(yīng)用程序?qū)ζ滟x值,由應(yīng)用程序?qū)ζ滟x值,SQL語(yǔ)句引用。語(yǔ)句引用。輸出主變量輸出主變量-由由SQL語(yǔ)句賦值或
12、設(shè)置狀態(tài)信息,返回給應(yīng)用程序。語(yǔ)句賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序。一個(gè)主變量有可能既是輸入主變量又是輸出主變量一個(gè)主變量有可能既是輸入主變量又是輸出主變量v定義定義SQLCA 用用EXEC SQL INCLUDE SQLCA加以定義加以定義v使用使用SQLCASQLCA中有一個(gè)存放每次執(zhí)行中有一個(gè)存放每次執(zhí)行SQL語(yǔ)句后返回代碼的變量語(yǔ)句后返回代碼的變量SQLCODE ;如果如果SQLCODE等于預(yù)定義的常量等于預(yù)定義的常量SUCCESS,則表示,則表示SQL語(yǔ)句成功,語(yǔ)句成功,否則在否則在SQLCODE 存放錯(cuò)誤代碼;存放錯(cuò)誤代碼;應(yīng)用程序每執(zhí)行完一條應(yīng)用程序每執(zhí)行完一條SQL 語(yǔ)句之后
13、都應(yīng)該測(cè)試一下語(yǔ)句之后都應(yīng)該測(cè)試一下SQLCODE的的值,以了解該值,以了解該SQL語(yǔ)句執(zhí)行情況并做相應(yīng)處理。語(yǔ)句執(zhí)行情況并做相應(yīng)處理。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院v指示變量指示變量一個(gè)主變量可以附帶一個(gè)指示變量(一個(gè)主變量可以附帶一個(gè)指示變量(Indicator Variable)什么是指示變量什么是指示變量 整型變量整型變量 用來用來“指示指示”所指主變量的值或條件。所指主變量的值或條件。指示變量的用途指示變量的用途 指示變量可以輸入主變量是否為空值指示變量可以輸入主變量是
14、否為空值 指示變量可以檢測(cè)輸出主變量是否為空值,值是否被截?cái)?。指示變量可以檢測(cè)輸出主變量是否為空值,值是否被截?cái)?。?shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院v在在SQL語(yǔ)句中使用主變量和指示變量的方法語(yǔ)句中使用主變量和指示變量的方法1) 說明主變量和指示變量說明主變量和指示變量BEGIN DECLARE SECTION. . (說明主變量和指示變量說明主變量和指示變量)END DECLARE SECTION2) 使用主變量使用主變量 說明之后的主變量可以在說明之后的主變量可以在SQL語(yǔ)句中任
15、何一個(gè)能夠使用表達(dá)式的語(yǔ)句中任何一個(gè)能夠使用表達(dá)式的地方出現(xiàn)。地方出現(xiàn)。 為了與數(shù)據(jù)庫(kù)對(duì)象名(表名、視圖名、列名等)區(qū)別,為了與數(shù)據(jù)庫(kù)對(duì)象名(表名、視圖名、列名等)區(qū)別,SQL語(yǔ)句語(yǔ)句中的主變量名前要加冒號(hào)(中的主變量名前要加冒號(hào)(:)作為標(biāo)志)作為標(biāo)志3) 使用指示變量使用指示變量 指示變量前也必須加冒號(hào)標(biāo)志指示變量前也必須加冒號(hào)標(biāo)志 必須緊跟在所指主變量之后必須緊跟在所指主變量之后v在在SQL語(yǔ)句之外語(yǔ)句之外(主語(yǔ)言語(yǔ)句中主語(yǔ)言語(yǔ)句中)使用主變量和指示變量的方法:使用主變量和指示變量的方法:可以直接引用,不必加冒號(hào)??梢灾苯右茫槐丶用疤?hào)。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)
16、系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院三、游標(biāo)(三、游標(biāo)(cursor)1、為什么要使用游標(biāo)、為什么要使用游標(biāo)SQL語(yǔ)言與主語(yǔ)言具有不同數(shù)據(jù)處理方式語(yǔ)言與主語(yǔ)言具有不同數(shù)據(jù)處理方式SQL語(yǔ)言是面向集合的,一條語(yǔ)言是面向集合的,一條SQL語(yǔ)句原則上可以產(chǎn)生或處理多條記語(yǔ)句原則上可以產(chǎn)生或處理多條記錄錄主語(yǔ)言是面向記錄的,一組主變量一次只能存放一條記錄主語(yǔ)言是面向記錄的,一組主變量一次只能存放一條記錄 僅使用主變量并不能完全滿足僅使用主變量并不能完全滿足SQL語(yǔ)句向應(yīng)用程序輸出數(shù)據(jù)的要求語(yǔ)句向應(yīng)用程序輸出數(shù)據(jù)的要求 嵌入式嵌入式SQL引入
17、了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同的處理方式引入了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同的處理方式2、什么是游標(biāo)、什么是游標(biāo)游標(biāo)是系統(tǒng)為用戶開設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放游標(biāo)是系統(tǒng)為用戶開設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放SQL語(yǔ)句的執(zhí)行結(jié)果語(yǔ)句的執(zhí)行結(jié)果每個(gè)游標(biāo)區(qū)都有一個(gè)名字每個(gè)游標(biāo)區(qū)都有一個(gè)名字用戶可以用用戶可以用SQL語(yǔ)句逐一從游標(biāo)中獲取記錄,并賦給主變量,交由主語(yǔ)句逐一從游標(biāo)中獲取記錄,并賦給主變量,交由主語(yǔ)言進(jìn)一步處理。語(yǔ)言進(jìn)一步處理。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院四、四、 建立和關(guān)閉數(shù)據(jù)庫(kù)連
18、接建立和關(guān)閉數(shù)據(jù)庫(kù)連接1、建立數(shù)據(jù)庫(kù)連接、建立數(shù)據(jù)庫(kù)連接嵌入式嵌入式SQL要訪問數(shù)據(jù)庫(kù)必須先連接數(shù)據(jù)庫(kù),要訪問數(shù)據(jù)庫(kù)必須先連接數(shù)據(jù)庫(kù),DBMS根據(jù)用戶信息根據(jù)用戶信息對(duì)連接請(qǐng)求進(jìn)行合法性驗(yàn)證,只有通過了身份驗(yàn)證,才能建立一個(gè)可用對(duì)連接請(qǐng)求進(jìn)行合法性驗(yàn)證,只有通過了身份驗(yàn)證,才能建立一個(gè)可用的合法連接。其語(yǔ)句是:的合法連接。其語(yǔ)句是:EXEC SQL CONNECT TO targetAS connection-nameUSER user-name;Target:是連接數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)服務(wù)器,它可以是一個(gè)常見的服務(wù)器,是連接數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)服務(wù)器,它可以是一個(gè)常見的服務(wù)器,或是包含服務(wù)器標(biāo)識(shí)的或是包
19、含服務(wù)器標(biāo)識(shí)的SQL串常量,也可以是串常量,也可以是DEFAULT。connection-name:是可選擇的連接名,連接必須是一個(gè)有效標(biāo)識(shí)符,:是可選擇的連接名,連接必須是一個(gè)有效標(biāo)識(shí)符,主要用來標(biāo)識(shí)整個(gè)程序內(nèi)同時(shí)建立多個(gè)連接,如果整個(gè)程序中只有一個(gè)主要用來標(biāo)識(shí)整個(gè)程序內(nèi)同時(shí)建立多個(gè)連接,如果整個(gè)程序中只有一個(gè)連接也可以不指定連接名。如果程序運(yùn)行過程中建立了多個(gè)連接,執(zhí)行連接也可以不指定連接名。如果程序運(yùn)行過程中建立了多個(gè)連接,執(zhí)行所有的數(shù)據(jù)庫(kù)單元的工作都在該操作提交時(shí)所選擇的當(dāng)前連接上。程序所有的數(shù)據(jù)庫(kù)單元的工作都在該操作提交時(shí)所選擇的當(dāng)前連接上。程序運(yùn)行過程中可以修改當(dāng)前連接,對(duì)應(yīng)的嵌入
20、式運(yùn)行過程中可以修改當(dāng)前連接,對(duì)應(yīng)的嵌入式SQL語(yǔ)句是:語(yǔ)句是:EXEC SQL SET CONNECT TO connection-name| DEFAULT數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院2、關(guān)閉數(shù)據(jù)庫(kù)連接、關(guān)閉數(shù)據(jù)庫(kù)連接當(dāng)某個(gè)連接上的所有數(shù)據(jù)庫(kù)操作完成后,應(yīng)用程序應(yīng)該主動(dòng)釋放所占當(dāng)某個(gè)連接上的所有數(shù)據(jù)庫(kù)操作完成后,應(yīng)用程序應(yīng)該主動(dòng)釋放所占用的連接資源。用的連接資源。EXEC SQL DISCONNECT connection;connection:是:是EXEC SQL CO
21、NNECT所建立的數(shù)據(jù)庫(kù)連接所建立的數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院五、五、 程序?qū)嵗绦驅(qū)嵗?:依次檢查某個(gè)系學(xué)生的記錄,交互式更新某些學(xué)生的年齡。:依次檢查某個(gè)系學(xué)生的記錄,交互式更新某些學(xué)生的年齡。EXEC SQL BEGIN DECLARE SECTION; /* 說明主變量說明主變量 */ CHAR deptname(20); CHAR HSno(9); CHAR HSname(20); CHAR HSeex(2); INT HSage; INT NEWAG
22、E;EXEC SQL END DECLARE SECTION;Long SQLCODE;EXEC SQL INCLUDE SQLCA; /* 定義定義SQL通信區(qū)通信區(qū) */數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院main(void) int count=0; char yn; printf(“Please choose the department name(CS/MA/IS):”); scanf(“%s”,& deptname); EXEC SQL CONNECT TO TES
23、Tlocalhost:54321 USER”SYSTEM”/”MANAGER”; EXEC SQL DECLARE SX CURSOR FOR /* 定義游標(biāo)定義游標(biāo)SX*/ SELECT Sno,Sname,Seex,Sage /* SX對(duì)應(yīng)的語(yǔ)句對(duì)應(yīng)的語(yǔ)句*/ FROM Student WHERE Sdept=: deptname; EXEC SQL OPEN SX; /* 打開游標(biāo)打開游標(biāo)SX,指向查詢結(jié)果的第一行,指向查詢結(jié)果的第一行*/數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院 f
24、or(;) EXEC SQL FETCH SX INTO : Hsno,:Hsname,:Hseex,:HSage; /* 將當(dāng)前數(shù)據(jù)放入主變量并推進(jìn)游標(biāo)指針將當(dāng)前數(shù)據(jù)放入主變量并推進(jìn)游標(biāo)指針*/ if (sqlca.sqlcode SUCCESS) /* 利用利用SQLCA中的狀態(tài)信息決定何時(shí)退出循環(huán)中的狀態(tài)信息決定何時(shí)退出循環(huán) */ break; if(count +=0) printf(“ n%-10s %-20s %-10s, %10sn”, “Sno ”, “Sname ”, “Ssex ”, “Sage ”); /* 如果是第一行如果是第一行,則打印行頭則打印行頭 */ print
25、f( %-10s %-20s %-10s, %-10d , Sno, Sname, Ssex, Sage); /* 顯示該記錄顯示該記錄 */ printf(UPDATE AGE (y/n)? ); /* 問用戶是否要修改問用戶是否要修改 */數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院 Do scanf(%c,&yn); While(yn!=n & yn!=N &yn!=y & yn!=Y ); if (yn=y | yn=Y) /* 需要修改需要修改 */
26、printf(INPUT NEW AGE: ); scanf(%d,&NEWAge); /* 輸入新的年齡值輸入新的年齡值 */ EXEC SQL UPDATE Student SET Sage=:NEWAge WHERE CURRENT OF SX; /* 修改當(dāng)前記錄的年齡字段修改當(dāng)前記錄的年齡字段 */ EXEC SQL CLOSE SX; /* 關(guān)閉游標(biāo)關(guān)閉游標(biāo)*/ EXEC SQL COMMIT WORK/* 提交更新提交更新*/ EXEC SQL DISCONNECT TEST /* 斷開數(shù)據(jù)庫(kù)連接斷開數(shù)據(jù)庫(kù)連接*/數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)
27、據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語(yǔ)句語(yǔ)句不用游標(biāo)的不用游標(biāo)的SQL語(yǔ)句的種類語(yǔ)句的種類 說明性語(yǔ)句說明性語(yǔ)句 數(shù)據(jù)定義語(yǔ)句數(shù)據(jù)定義語(yǔ)句 數(shù)據(jù)控制語(yǔ)句數(shù)據(jù)控制語(yǔ)句 查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語(yǔ)句語(yǔ)句 非非CURRENT形式的形式的UPDATE語(yǔ)句語(yǔ)句 非非CURRENT形式的形式的DELETE語(yǔ)句語(yǔ)句 INSERT語(yǔ)句語(yǔ)句數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院一、說明性語(yǔ)句一
28、、說明性語(yǔ)句說明性語(yǔ)句是專為在嵌入式說明性語(yǔ)句是專為在嵌入式SQL中說明主變量、中說明主變量、SQLCA等而設(shè)置的。等而設(shè)置的。v說明主變量說明主變量1. EXEC SQL BEGIN DECLARE SECTION; 2. EXEC SQL END DECLARE SECTION;這兩條語(yǔ)句必須配對(duì)出現(xiàn),相當(dāng)于一個(gè)括號(hào),兩條語(yǔ)句中間是主這兩條語(yǔ)句必須配對(duì)出現(xiàn),相當(dāng)于一個(gè)括號(hào),兩條語(yǔ)句中間是主變量的說明變量的說明v說明說明SQLCA3. EXEC SQL INCLUDE SQLCA數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)
29、編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院二、數(shù)據(jù)定義語(yǔ)句二、數(shù)據(jù)定義語(yǔ)句例例2 建立一個(gè)建立一個(gè)“學(xué)生學(xué)生”表表Student EXEC SQL CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15);注:注:數(shù)據(jù)定義語(yǔ)句中不允許使用主變量數(shù)據(jù)定義語(yǔ)句中不允許使用主變量例:下列語(yǔ)句是錯(cuò)誤的例:下列語(yǔ)句是錯(cuò)誤的 EXEC SQL DROP TABLE :table_name;三、數(shù)據(jù)控制語(yǔ)句三、數(shù)據(jù)控制語(yǔ)句例例3 把查詢把查詢Student表權(quán)限授給
30、用戶表權(quán)限授給用戶U1 EXEC SQL GRANT SELECT ON TABLE Student TO U1;數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院四、查詢結(jié)果為單記錄的四、查詢結(jié)果為單記錄的SELECT語(yǔ)句語(yǔ)句 語(yǔ)句格式語(yǔ)句格式EXEC SQL SELECT ALL|DISTINCT ,. INTO ,. FROM , . WHERE GROUP BY HAVING ORDER BY ASC|DESC;對(duì)交互式對(duì)交互式SELECT語(yǔ)句的擴(kuò)充就是多了一個(gè)語(yǔ)句的擴(kuò)充就是多了一個(gè)INTO
31、子句。子句。把從數(shù)據(jù)庫(kù)中找到的符合條件的記錄,放到把從數(shù)據(jù)庫(kù)中找到的符合條件的記錄,放到INTO子句指出的子句指出的主變量中去。主變量中去。 使用注意事項(xiàng)使用注意事項(xiàng) 1. 使用主變量使用主變量 INTO子句子句 WHERE子句的條件表達(dá)式子句的條件表達(dá)式 HAVING短語(yǔ)的條件表達(dá)式短語(yǔ)的條件表達(dá)式數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院2. 使用指示變量使用指示變量指示變量只能用于指示變量只能用于INTO子句中子句中如果如果INTO子句中主變量后面跟有指示變量,則當(dāng)查詢得出的某個(gè)子句中
32、主變量后面跟有指示變量,則當(dāng)查詢得出的某個(gè)數(shù)據(jù)項(xiàng)為空值時(shí),系統(tǒng)會(huì)自動(dòng)將相應(yīng)主變量后面的指示變量置為負(fù)數(shù)據(jù)項(xiàng)為空值時(shí),系統(tǒng)會(huì)自動(dòng)將相應(yīng)主變量后面的指示變量置為負(fù)值,但不向該主變量執(zhí)行賦值操作,即主變量值仍保持執(zhí)行值,但不向該主變量執(zhí)行賦值操作,即主變量值仍保持執(zhí)行SQL語(yǔ)語(yǔ)句之前的值句之前的值當(dāng)發(fā)現(xiàn)指示變量值為負(fù)值時(shí),不管主變量為何值,均應(yīng)認(rèn)為主變量當(dāng)發(fā)現(xiàn)指示變量值為負(fù)值時(shí),不管主變量為何值,均應(yīng)認(rèn)為主變量值為值為NULL3. 查詢結(jié)果為空集查詢結(jié)果為空集如果數(shù)據(jù)庫(kù)中沒有滿足條件的記錄,即查詢結(jié)果為空,則如果數(shù)據(jù)庫(kù)中沒有滿足條件的記錄,即查詢結(jié)果為空,則DBMS將將SQLCODE的值置為的值置為
33、1004. 查詢結(jié)果為多條記錄查詢結(jié)果為多條記錄程序出錯(cuò),程序出錯(cuò),DBMS會(huì)在會(huì)在SQLCA中返回錯(cuò)誤信息中返回錯(cuò)誤信息數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院例例4 根據(jù)學(xué)生號(hào)碼查詢學(xué)生信息。根據(jù)學(xué)生號(hào)碼查詢學(xué)生信息。 假設(shè)已將要查詢的學(xué)生的學(xué)號(hào)賦給了主變量假設(shè)已將要查詢的學(xué)生的學(xué)號(hào)賦給了主變量givensnoEXEC SQL SELECT Sno, Sname, Ssex, Sage, Sdept INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept FR
34、OM Student WHERE Sno=:givensno;Hsno, Hname, Hsex, Hage, Hdept和和givensno均是主變量,并均已在前均是主變量,并均已在前面的程序中說明過了。面的程序中說明過了。例例5 查詢某個(gè)學(xué)生選修某門課程的成績(jī)。查詢某個(gè)學(xué)生選修某門課程的成績(jī)。 假設(shè)已將要查詢的學(xué)生的學(xué)號(hào)賦給了主變量假設(shè)已將要查詢的學(xué)生的學(xué)號(hào)賦給了主變量givensno,將課程號(hào)賦給了,將課程號(hào)賦給了主變量主變量givencno。 EXEC SQL SELECT Sno, Cno, Grade INTO :Hsno, :Hcno, :Hgrade:Gradeid FROM
35、SC WHERE Sno=:givensno AND Cno=:givencno;數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院從提高應(yīng)用程序的數(shù)據(jù)獨(dú)立性角度考慮,從提高應(yīng)用程序的數(shù)據(jù)獨(dú)立性角度考慮,SELECT語(yǔ)句在任語(yǔ)句在任何情況下都應(yīng)該使用游標(biāo)何情況下都應(yīng)該使用游標(biāo)對(duì)于僅返回一行結(jié)果數(shù)據(jù)的對(duì)于僅返回一行結(jié)果數(shù)據(jù)的SELECT語(yǔ)句雖然可以不使用游標(biāo)語(yǔ)句雖然可以不使用游標(biāo)但如果以后數(shù)據(jù)庫(kù)改變了,該但如果以后數(shù)據(jù)庫(kù)改變了,該SELECT語(yǔ)句可能會(huì)返回多行數(shù)據(jù),這語(yǔ)句可能會(huì)返回多行數(shù)據(jù),這時(shí)該語(yǔ)句
36、就會(huì)出錯(cuò)時(shí)該語(yǔ)句就會(huì)出錯(cuò)數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院五、非五、非CURRENT形式的增刪改語(yǔ)句形式的增刪改語(yǔ)句v非非CURRENT形式的形式的UPDATE語(yǔ)句語(yǔ)句使用主變量使用主變量 SET子句子句 WHERE子句子句使用指示變量使用指示變量 SET子句子句v非非CURRENT形式的形式的UPDATE語(yǔ)句可以操作多條元組語(yǔ)句可以操作多條元組例例6 修改某個(gè)學(xué)生修改某個(gè)學(xué)生1號(hào)課程的成績(jī)。號(hào)課程的成績(jī)。 假設(shè)該學(xué)生的學(xué)號(hào)已賦給主變量假設(shè)該學(xué)生的學(xué)號(hào)已賦給主變量givensno,修
37、改后的成績(jī)已賦給主,修改后的成績(jī)已賦給主變量變量newgrade。 EXEC SQL UPDATE SC SET Grade=:newgrade WHERE Sno=:givensno and Cno=1;數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院例例7 將計(jì)算機(jī)系全體學(xué)生年齡置將計(jì)算機(jī)系全體學(xué)生年齡置NULL值值 Sageid=-1; EXEC SQL UPDATE Student SET Sage=:Raise:Sageid WHERE Sdept=CS;將指示變量將指示變量Sageid
38、賦一個(gè)負(fù)值后,無論主變量賦一個(gè)負(fù)值后,無論主變量Raise為何值,為何值,DBMS都都會(huì)將會(huì)將CS系所有記錄的年齡屬性置空值。它等價(jià)于:系所有記錄的年齡屬性置空值。它等價(jià)于: EXEC SQL UPDATE Student SET Sage=NULL WHERE Sdept=CS;數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院例例8 某個(gè)學(xué)生退學(xué)了,現(xiàn)要將有關(guān)他的所有選課記錄刪除掉。某個(gè)學(xué)生退學(xué)了,現(xiàn)要將有關(guān)他的所有選課記錄刪除掉。 假設(shè)該學(xué)生的姓名已賦給主變量假設(shè)該學(xué)生的姓名已賦給主變量std
39、name EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname);例例9 某個(gè)學(xué)生新選修了某門課程,將有關(guān)記錄插入某個(gè)學(xué)生新選修了某門課程,將有關(guān)記錄插入SC表表 假設(shè)學(xué)生的學(xué)號(hào)已賦給主變量假設(shè)學(xué)生的學(xué)號(hào)已賦給主變量stdno,課程號(hào)已賦給主變量,課程號(hào)已賦給主變量couno。 gradeid=-1; EXEC SQL INSERT INTO SC(Sno, Cno, Grade) VALUES(:stdno, :couno, :gr:gradeid);由于該學(xué)生剛選修課程,尚未考試,因
40、此成績(jī)列為空。所以本例中用由于該學(xué)生剛選修課程,尚未考試,因此成績(jī)列為空。所以本例中用指示變量指示相應(yīng)的主變量為空值。指示變量指示相應(yīng)的主變量為空值。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.4 8.1.4 使用游標(biāo)的使用游標(biāo)的SQLSQL語(yǔ)句語(yǔ)句必須使用游標(biāo)的必須使用游標(biāo)的SQL語(yǔ)句語(yǔ)句查詢結(jié)果為多條記錄的查詢結(jié)果為多條記錄的SELECT語(yǔ)句語(yǔ)句CURRENT形式的形式的UPDATE語(yǔ)句語(yǔ)句CURRENT形式的形式的DELETE語(yǔ)句語(yǔ)句一、一、 查詢結(jié)果為多條記錄的查詢結(jié)果為多條記
41、錄的SELECT語(yǔ)句語(yǔ)句使用游標(biāo)的步驟:使用游標(biāo)的步驟:1. 說明游標(biāo)說明游標(biāo)2. 打開游標(biāo)打開游標(biāo)3. 移動(dòng)游標(biāo)指針,然后取當(dāng)前記錄移動(dòng)游標(biāo)指針,然后取當(dāng)前記錄4. 關(guān)閉游標(biāo)關(guān)閉游標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院1. 說明游標(biāo)說明游標(biāo)語(yǔ)句格式語(yǔ)句格式EXEC SQL DECLARE CURSOR FOR ;功能:功能:是一條說明性語(yǔ)句,這時(shí)是一條說明性語(yǔ)句,這時(shí)DBMS并不執(zhí)行并不執(zhí)行SELECT指定的查詢操作。指定的查詢操作。2. 打開游標(biāo)打開游標(biāo)語(yǔ)句格式語(yǔ)句格式 EXEC
42、SQL OPEN ;功能:功能:打開游標(biāo)實(shí)際上是執(zhí)行相應(yīng)的打開游標(biāo)實(shí)際上是執(zhí)行相應(yīng)的SELECT語(yǔ)句,把所有滿足查詢語(yǔ)句,把所有滿足查詢條件的記錄從指定表取到緩沖區(qū)中,這時(shí)游標(biāo)處于活動(dòng)狀態(tài),指針指條件的記錄從指定表取到緩沖區(qū)中,這時(shí)游標(biāo)處于活動(dòng)狀態(tài),指針指向查詢結(jié)果集中第一條記錄之前。向查詢結(jié)果集中第一條記錄之前。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院3. 移動(dòng)游標(biāo)指針,然后取當(dāng)前記錄移動(dòng)游標(biāo)指針,然后取當(dāng)前記錄語(yǔ)句格式語(yǔ)句格式EXEC SQL FETCH NEXT|PRIOR|FIRS
43、T|LAST FROM INTO ,.;功能功能:指定方向推動(dòng)游標(biāo)指針,然后將緩沖區(qū)中的當(dāng)前記錄取出來:指定方向推動(dòng)游標(biāo)指針,然后將緩沖區(qū)中的當(dāng)前記錄取出來送至主變量供主語(yǔ)言進(jìn)一步處理。送至主變量供主語(yǔ)言進(jìn)一步處理。NEXT|PRIOR|FIRST|LAST:指定推動(dòng)游標(biāo)指針的方式。:指定推動(dòng)游標(biāo)指針的方式。NEXT:向前推進(jìn)一條記錄(缺省值):向前推進(jìn)一條記錄(缺省值)PRIOR:向回退一條記錄:向回退一條記錄FIRST:推向第一條記錄:推向第一條記錄LAST:推向最后一條記錄:推向最后一條記錄說明說明(1) 主變量必須與主變量必須與SELECT語(yǔ)句中的目標(biāo)列表達(dá)式具有一一對(duì)應(yīng)語(yǔ)句中的目標(biāo)列
44、表達(dá)式具有一一對(duì)應(yīng)關(guān)系關(guān)系(2) FETCH語(yǔ)句通常用在一個(gè)循環(huán)結(jié)構(gòu)中,通過循環(huán)執(zhí)行語(yǔ)句通常用在一個(gè)循環(huán)結(jié)構(gòu)中,通過循環(huán)執(zhí)行FETCH語(yǔ)句逐條取出結(jié)果集中的行進(jìn)行處理語(yǔ)句逐條取出結(jié)果集中的行進(jìn)行處理(3) 為進(jìn)一步方便用戶處理數(shù)據(jù),現(xiàn)在一些關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)為進(jìn)一步方便用戶處理數(shù)據(jù),現(xiàn)在一些關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)對(duì)FETCH語(yǔ)句做了擴(kuò)充,允許用戶向任意方向以任意步長(zhǎng)移語(yǔ)句做了擴(kuò)充,允許用戶向任意方向以任意步長(zhǎng)移動(dòng)游標(biāo)指針。動(dòng)游標(biāo)指針。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院4. 關(guān)閉游標(biāo)關(guān)閉
45、游標(biāo)語(yǔ)句格式語(yǔ)句格式 EXEC SQL CLOSE ;功能功能關(guān)閉游標(biāo),釋放結(jié)果及占用的緩沖區(qū)及其他資源。關(guān)閉游標(biāo),釋放結(jié)果及占用的緩沖區(qū)及其他資源。說明說明游標(biāo)被關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系被關(guān)閉的游標(biāo)可游標(biāo)被關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系被關(guān)閉的游標(biāo)可以再次被打開,與新的查詢結(jié)果相聯(lián)系。以再次被打開,與新的查詢結(jié)果相聯(lián)系。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院二、二、CURRENT形式的形式的UPDATE語(yǔ)句和語(yǔ)句和DELETE語(yǔ)句語(yǔ)句CURRENT形式的形式的UP
46、DATE語(yǔ)句和語(yǔ)句和DELETE語(yǔ)句的用途語(yǔ)句的用途.CURRENT形式的形式的UPDATE語(yǔ)句和語(yǔ)句和DELETE語(yǔ)句語(yǔ)句 面向集合的操作面向集合的操作; 一次修改或刪除所有滿足條件的記錄一次修改或刪除所有滿足條件的記錄.如果只想修改或刪除其中某個(gè)記錄;如果只想修改或刪除其中某個(gè)記錄; 用帶游標(biāo)的用帶游標(biāo)的SELECT語(yǔ)句查出所有滿足條件的記錄;語(yǔ)句查出所有滿足條件的記錄; 從中進(jìn)一步找出要修改或刪除的記錄;從中進(jìn)一步找出要修改或刪除的記錄; 用用CURRENT形式的形式的UPDATE語(yǔ)句和語(yǔ)句和DELETE語(yǔ)句修改或刪除語(yǔ)句修改或刪除之。之。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)
47、系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院步驟步驟(1) DECLARE 說明游標(biāo)說明游標(biāo) (2) OPEN 打開游標(biāo),把所有滿足查詢條件的記錄從指定表取至緩沖區(qū)打開游標(biāo),把所有滿足查詢條件的記錄從指定表取至緩沖區(qū)(3) FETCH推進(jìn)游標(biāo)指針,并把當(dāng)前記錄從緩沖區(qū)中取出來送至主變量推進(jìn)游標(biāo)指針,并把當(dāng)前記錄從緩沖區(qū)中取出來送至主變量(4) 檢查該記錄是否是要修改或刪除的記錄,是則處理之檢查該記錄是否是要修改或刪除的記錄,是則處理之 (5) 重復(fù)第重復(fù)第(3)和和(4)步,用逐條取出結(jié)果集中的行進(jìn)行判斷和處理步,用逐條取出結(jié)果集中的行進(jìn)行
48、判斷和處理(6) CLOSE 關(guān)閉游標(biāo),釋放結(jié)果集占用的緩沖區(qū)和其他資源關(guān)閉游標(biāo),釋放結(jié)果集占用的緩沖區(qū)和其他資源數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院說明游標(biāo)說明游標(biāo)v為為UPDATE語(yǔ)句說明游標(biāo)語(yǔ)句說明游標(biāo)語(yǔ)句格式語(yǔ)句格式 EXEC SQL DECLARE CURSOR FOR FOR UPDATE OF ;說明:說明:FOR UPDATE OF 短語(yǔ)用于指明檢索出的數(shù)據(jù)在指定列短語(yǔ)用于指明檢索出的數(shù)據(jù)在指定列上是可修改的,以便上是可修改的,以便DBMS進(jìn)行并發(fā)控制進(jìn)行并發(fā)控制v為為
49、DELETE語(yǔ)句說明游標(biāo)語(yǔ)句說明游標(biāo)語(yǔ)句格式語(yǔ)句格式 EXEC SQL DECLARE CURSOR FOR FOR UPDATE;說明:說明:FOR UPDATE短語(yǔ)提示短語(yǔ)提示DBMS進(jìn)行并發(fā)控制進(jìn)行并發(fā)控制數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院v修改或刪除當(dāng)前記錄修改或刪除當(dāng)前記錄經(jīng)檢查緩沖區(qū)中記錄是要修改或刪除的記錄,則用經(jīng)檢查緩沖區(qū)中記錄是要修改或刪除的記錄,則用UPDATE語(yǔ)語(yǔ)句或句或DELETE語(yǔ)句修改或刪除該記錄語(yǔ)句修改或刪除該記錄語(yǔ)句格式語(yǔ)句格式 WHERE CURRE
50、NT OF WHERE CURRENT OF WHERE CURRENT OF 子句表示修改或刪除的是該游子句表示修改或刪除的是該游標(biāo)中最近一次取出的記錄標(biāo)中最近一次取出的記錄v當(dāng)游標(biāo)定義中的當(dāng)游標(biāo)定義中的SELECT語(yǔ)句帶有語(yǔ)句帶有UNION或或ORDER BY子句時(shí),子句時(shí),或者該或者該SELECT語(yǔ)句相當(dāng)于定義了一個(gè)不可更新的視圖時(shí),不能語(yǔ)句相當(dāng)于定義了一個(gè)不可更新的視圖時(shí),不能使用使用CURRENT形式的形式的UPDATE語(yǔ)句和語(yǔ)句和DELETE語(yǔ)句語(yǔ)句數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī)
51、 學(xué)學(xué) 院院8.1.5 動(dòng)態(tài)動(dòng)態(tài)SQL簡(jiǎn)介簡(jiǎn)介一、靜態(tài)一、靜態(tài)SQL的特點(diǎn)的特點(diǎn)嵌入式嵌入式SQL分分靜態(tài)嵌入式靜態(tài)嵌入式SQL動(dòng)態(tài)嵌入式動(dòng)態(tài)嵌入式SQLv用戶可以在程序運(yùn)行過程中根據(jù)實(shí)際需要輸入用戶可以在程序運(yùn)行過程中根據(jù)實(shí)際需要輸入WHERE子句或子句或HAVING子句中某些變量的子句中某些變量的值值。v語(yǔ)句中主變量的語(yǔ)句中主變量的個(gè)數(shù)與數(shù)據(jù)類型個(gè)數(shù)與數(shù)據(jù)類型在預(yù)編譯時(shí)都是確定的,只有是在預(yù)編譯時(shí)都是確定的,只有是主變量的主變量的值值是程序運(yùn)行過程中動(dòng)態(tài)輸入的。是程序運(yùn)行過程中動(dòng)態(tài)輸入的。v靜態(tài)靜態(tài)SQL的不足的不足靜態(tài)靜態(tài)SQL語(yǔ)句提供的編程語(yǔ)句提供的編程靈活性靈活性在許多情況下仍顯得不
52、足,不能在許多情況下仍顯得不足,不能編寫更為通用的程序。編寫更為通用的程序。例,對(duì)例,對(duì)SC:任課教師想查選修某門課程的所有學(xué)生的學(xué)號(hào)及其成績(jī)?nèi)握n教師想查選修某門課程的所有學(xué)生的學(xué)號(hào)及其成績(jī)班主任想查某個(gè)學(xué)生選修的所有課程的課程號(hào)及相應(yīng)成績(jī)班主任想查某個(gè)學(xué)生選修的所有課程的課程號(hào)及相應(yīng)成績(jī)學(xué)生想查某個(gè)學(xué)生選修某門課程的成績(jī)學(xué)生想查某個(gè)學(xué)生選修某門課程的成績(jī)即:查詢即:查詢條件是不確定條件是不確定的,要查詢的的,要查詢的屬性列屬性列也是不確定的也是不確定的數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué)
53、院院二、動(dòng)態(tài)二、動(dòng)態(tài)SQL1. 什么是動(dòng)態(tài)嵌入式什么是動(dòng)態(tài)嵌入式SQL動(dòng)態(tài)動(dòng)態(tài)SQL方法允許在程序運(yùn)行過程中臨時(shí)方法允許在程序運(yùn)行過程中臨時(shí)“組裝組裝”SQL語(yǔ)句。語(yǔ)句。2. 應(yīng)用范圍應(yīng)用范圍在在預(yù)編譯預(yù)編譯時(shí)下列信息不能確定時(shí)時(shí)下列信息不能確定時(shí) SQL語(yǔ)句正文語(yǔ)句正文 主變量個(gè)數(shù)主變量個(gè)數(shù) 主變量的數(shù)據(jù)類型主變量的數(shù)據(jù)類型 SQL語(yǔ)句中引用的數(shù)據(jù)庫(kù)對(duì)象(列、索引、基本表、視圖等)語(yǔ)句中引用的數(shù)據(jù)庫(kù)對(duì)象(列、索引、基本表、視圖等)數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院4. 常用動(dòng)態(tài)常用
54、動(dòng)態(tài)SQL語(yǔ)句語(yǔ)句EXECUTE IMMEDIATEPREPAREEXECUTEDESCRIBE使用動(dòng)態(tài)使用動(dòng)態(tài)SQL技術(shù)更多的是涉及程序設(shè)計(jì)方面的知識(shí),而不是技術(shù)更多的是涉及程序設(shè)計(jì)方面的知識(shí),而不是SQL語(yǔ)言本身語(yǔ)言本身3. 動(dòng)態(tài)動(dòng)態(tài)SQL的形式的形式語(yǔ)句可變語(yǔ)句可變 臨時(shí)構(gòu)造完整的臨時(shí)構(gòu)造完整的SQL語(yǔ)句語(yǔ)句條件可變條件可變 WHERE子句中的條件和子句中的條件和 HAVING短語(yǔ)中的條件短語(yǔ)中的條件數(shù)據(jù)庫(kù)對(duì)象、查詢條件均可變數(shù)據(jù)庫(kù)對(duì)象、查詢條件均可變 SELECT子句中的列名子句中的列名 FROM子句中的表名或視圖名子句中的表名或視圖名 WHERE子句中的條件子句中的條件 HAVING
55、短語(yǔ)中的條件短語(yǔ)中的條件數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.1.6 小結(jié)小結(jié)v與主語(yǔ)言的通信方式與主語(yǔ)言的通信方式1. SQL通信區(qū)向主語(yǔ)言傳遞通信區(qū)向主語(yǔ)言傳遞SQL語(yǔ)句的執(zhí)行狀態(tài)信息語(yǔ)句的執(zhí)行狀態(tài)信息2. 主變量主變量 1)主語(yǔ)言向)主語(yǔ)言向SQL語(yǔ)句提供參數(shù)語(yǔ)句提供參數(shù) 2)將)將SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理3. 游標(biāo)解決集合性操作語(yǔ)言與過程性操作語(yǔ)言的不匹配游標(biāo)解決集合性操作語(yǔ)言與過程性操作語(yǔ)言的不匹配v靜態(tài)靜態(tài)SQL
56、不用游標(biāo)不用游標(biāo)不需要返回結(jié)果數(shù)據(jù)的不需要返回結(jié)果數(shù)據(jù)的SQL語(yǔ)句語(yǔ)句只返回一條結(jié)果的只返回一條結(jié)果的SQL語(yǔ)句語(yǔ)句 使用游標(biāo)使用游標(biāo)說明游標(biāo)說明游標(biāo)打開游標(biāo)打開游標(biāo)推進(jìn)游標(biāo)并取當(dāng)前記錄推進(jìn)游標(biāo)并取當(dāng)前記錄關(guān)閉游標(biāo)關(guān)閉游標(biāo)v動(dòng)態(tài)動(dòng)態(tài)SQL數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.2 存儲(chǔ)過程存儲(chǔ)過程是指經(jīng)過預(yù)先的擴(kuò)展的存儲(chǔ)過程是指經(jīng)過預(yù)先的擴(kuò)展的SQL語(yǔ)句的集合,語(yǔ)句的集合,存儲(chǔ)過程是提高數(shù)據(jù)庫(kù)服務(wù)性能的有力工具。存儲(chǔ)過程是提高數(shù)據(jù)庫(kù)服務(wù)性能的有力工具。存儲(chǔ)過程不是標(biāo)準(zhǔn)的存儲(chǔ)過程不是標(biāo)準(zhǔn)
57、的SQL語(yǔ)句,不同的數(shù)據(jù)庫(kù)具體實(shí)現(xiàn)不同。語(yǔ)句,不同的數(shù)據(jù)庫(kù)具體實(shí)現(xiàn)不同。數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院8.2.1 Transact-SQL的塊結(jié)構(gòu)vTransact-SQL :SQL的擴(kuò)展 增加了過程化語(yǔ)句功能 基本結(jié)構(gòu)是塊塊之間可以互相嵌套 每個(gè)塊完成一個(gè)邏輯操作 數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院vTransact-SQL塊的基本結(jié)構(gòu):塊的基本結(jié)構(gòu): 1.定義部分定
58、義部分 DECLARE -變量、常量、游標(biāo)、異常等 n定義的變量、常量等只能在該基本塊中使用n當(dāng)基本塊執(zhí)行結(jié)束時(shí),定義就不再存在8.2.1 Transact-SQL的塊結(jié)構(gòu)DECLARE 變量名 變量類型,變量名 變量類型SELECT 局部變量= 變量值, SET 局部變量量= 變量值【例】聲明8 個(gè)字符的變量id并賦值。 declare Name char(20)set name=張三print nameprint -USE MyDBselect name=sname from Student where sno=95003print name數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)
59、系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論第八章第八章 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程計(jì)計(jì) 算算 機(jī)機(jī) 學(xué)學(xué) 院院2.執(zhí)行部分執(zhí)行部分 BEGIN -SQL語(yǔ)句-Transact-SQL的流程控制語(yǔ)句 END;DECLARE sno varchar(5), sname varchar(8), ssex varchar(2), sage INT, sdept varchar(80)PRINT - Male Student report -DECLARE Student_cursor CURSOR FOR SELECT sno,sname,ssexFROM StudentORDER BY snoOPEN Stud
60、ent_cursorFETCH NEXT FROM Student_cursor INTO sno, sname, ssexWHILE FETCH_STATUS = 0BEGIN IF ssex = 男男 BEGIN PRINT Male Student Print sno+,+sname+. END - Get the next author. FETCH NEXT FROM Student_cursor INTO sno, sname, ssex PRINT -ENDCLOSE Student_cursorDEALLOCATE Student_cursorGO數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)庫(kù)系統(tǒng)概論數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 溝槽砂石墊層施工方案
- 液壓鋼板壩施工方案
- 端墻施工方案
- TSHAEPI 001-2022 凈味環(huán)保瀝青氣態(tài)污染物減排性能技術(shù)要求
- DLT-637-1997-閥控式密封鉛酸蓄電池訂貨技術(shù)條件
- 二零二五年度設(shè)備安裝安全協(xié)議及設(shè)備安裝驗(yàn)收證書
- 二零二五年度房地產(chǎn)租賃稅務(wù)籌劃與合同管理服務(wù)協(xié)議
- 二零二五年度住宅及地下室使用權(quán)租賃合同
- 2025年度智能化綠植養(yǎng)護(hù)服務(wù)合同協(xié)議書模板
- 二零二五年度珠寶店電子商務(wù)平臺(tái)合作開發(fā)合同
- LNG加氣站質(zhì)量管理手冊(cè)
- 苗木供貨服務(wù)計(jì)劃方案
- 《諫逐客書》課后練習(xí) 統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 2 我多想去看看(課件)-一年級(jí)下冊(cè)語(yǔ)文
- 《肺癌課件:基本概念與臨床表現(xiàn)》
- 產(chǎn)品九宮格產(chǎn)品賣點(diǎn)課件
- 政府采購(gòu)汽車采購(gòu)競(jìng)爭(zhēng)性談判文件
- 西安袁家村項(xiàng)目計(jì)劃書
- 新生兒休克的早期識(shí)別
- 小班音樂教案及教學(xué)反思《小動(dòng)物怎樣叫》
- Windows Server 2012 R2系統(tǒng)管理與服務(wù)器配置 教案全套 項(xiàng)目1-10
評(píng)論
0/150
提交評(píng)論