資源描述:
《數(shù)據(jù)庫(kù)原理A第8章_嵌入式SQL》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、第八章嵌入式SQLSQL語(yǔ)言提供了兩種不同的使用方式:交互式嵌入式為什么要引入嵌入式SQLSQL語(yǔ)言是非過(guò)程性語(yǔ)言事務(wù)處理應(yīng)用需要高級(jí)語(yǔ)言這兩種方式細(xì)節(jié)上有差別,在程序設(shè)計(jì)的環(huán)境下,SQL語(yǔ)句要做某些必要的擴(kuò)充一、通過(guò)嵌入式SQL訪問(wèn)數(shù)據(jù)庫(kù)二、通過(guò)存儲(chǔ)過(guò)程訪問(wèn)數(shù)據(jù)庫(kù)三、通過(guò)ODBC訪問(wèn)數(shù)據(jù)庫(kù)(一)、嵌入式SQL的一般形式嵌入式SQL語(yǔ)句的一般形式為:開(kāi)始標(biāo)志+SQL語(yǔ)句+結(jié)束標(biāo)志為了區(qū)分SQL語(yǔ)句與主語(yǔ)言語(yǔ)句,需要:前綴:EXECSQL結(jié)束標(biāo)志:隨主語(yǔ)言的不同而不同以C為主語(yǔ)言的嵌入式SQL語(yǔ)句的一般形式EXECSQL;例:EXECSQLDROPTAB
2、LEStudent;以COBOL作為主語(yǔ)言的嵌入式SQL語(yǔ)句的一般形式EXECSQLEND-EXEC例:EXECSQLDROPTABLEStudentEND-EXECDBMS處理宿主型數(shù)據(jù)庫(kù)語(yǔ)言SQL的方法預(yù)編譯修改和擴(kuò)充主語(yǔ)言使之能處理SQL語(yǔ)句(二)、嵌入式SQL的處理--預(yù)編譯1.由DBMS的預(yù)處理程序?qū)υ闯绦蜻M(jìn)行掃描,識(shí)別出SQL語(yǔ)句2.把它們轉(zhuǎn)換成主語(yǔ)言調(diào)用語(yǔ)句,以使主語(yǔ)言編譯程序能識(shí)別它3.最后由主語(yǔ)言的編譯程序?qū)⒄麄€(gè)源程序編譯成目標(biāo)碼。嵌入SQL語(yǔ)句說(shuō)明性語(yǔ)句嵌入SQL語(yǔ)句數(shù)據(jù)定義可執(zhí)行語(yǔ)句數(shù)據(jù)控制數(shù)據(jù)操縱允許出現(xiàn)可執(zhí)行的高級(jí)語(yǔ)言語(yǔ)句的地
3、方,都可以寫(xiě)可執(zhí)行SQL語(yǔ)句允許出現(xiàn)說(shuō)明語(yǔ)句的地方,都可以寫(xiě)說(shuō)明性SQL語(yǔ)句(三)、嵌入式SQL語(yǔ)句與主語(yǔ)言之間的通信將SQL嵌入到高級(jí)語(yǔ)言中混合編程,程序中會(huì)含有兩種不同計(jì)算模型的語(yǔ)句SQL語(yǔ)句描述性的面向集合的語(yǔ)句負(fù)責(zé)操縱數(shù)據(jù)庫(kù)高級(jí)語(yǔ)言語(yǔ)句過(guò)程性的面向記錄的語(yǔ)句負(fù)責(zé)控制程序流程工作單元之間的通信方式1.SQL通信區(qū)向主語(yǔ)言傳遞SQL語(yǔ)句的執(zhí)行狀態(tài)信息主語(yǔ)言能夠據(jù)此控制程序流程2.主變量1)主語(yǔ)言向SQL語(yǔ)句提供參數(shù)2)將SQL語(yǔ)句查詢(xún)數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言進(jìn)一步處理3.游標(biāo)解決集合性操作語(yǔ)言與過(guò)程性操作語(yǔ)言的不匹配1.SQL通信區(qū)SQLCA:SQLCommunic
4、ationAreaSQLCA是一個(gè)數(shù)據(jù)結(jié)構(gòu)SQLCA的用途SQL語(yǔ)句執(zhí)行后,DBMS反饋給應(yīng)用程序信息描述系統(tǒng)當(dāng)前工作狀態(tài)描述運(yùn)行環(huán)境這些信息將送到SQL通信區(qū)SQLCA中應(yīng)用程序從SQLCA中取出這些狀態(tài)信息,據(jù)此決定接下來(lái)執(zhí)行的語(yǔ)句SQLCA的內(nèi)容與所執(zhí)行的SQL語(yǔ)句有關(guān)與該SQL語(yǔ)句的執(zhí)行情況有關(guān)例:在執(zhí)行刪除語(yǔ)句DELETE后,不同的執(zhí)行情況,SQLCA中有不同的信息:違反數(shù)據(jù)保護(hù)規(guī)則,操作拒絕沒(méi)有滿(mǎn)足條件的行,一行也沒(méi)有刪除成功刪除,并有刪除的行數(shù)無(wú)條件刪除警告信息由于各種原因,執(zhí)行出錯(cuò)SQLCA的使用方法定義SQLCA用EXECSQLINCLUDESQL
5、CA加以定義使用SQLCASQLCA中有一個(gè)存放每次執(zhí)行SQL語(yǔ)句后返回代碼的變量SQLCODE如果SQLCODE等于預(yù)定義的常量SUCCESS,則表示SQL語(yǔ)句成功,否則表示出錯(cuò)應(yīng)用程序每執(zhí)行完一條SQL語(yǔ)句之后都應(yīng)該測(cè)試一下SQLCODE的值,以了解該SQL語(yǔ)句執(zhí)行情況并做相應(yīng)處理2.主變量什么是主變量嵌入式SQL語(yǔ)句中可以使用主語(yǔ)言的程序變量來(lái)輸入或輸出數(shù)據(jù)在SQL語(yǔ)句中使用的主語(yǔ)言程序變量簡(jiǎn)稱(chēng)為主變量(HostVariable)主變量(續(xù))主變量的類(lèi)型輸入主變量由應(yīng)用程序?qū)ζ滟x值,SQL語(yǔ)句引用輸出主變量由SQL語(yǔ)句賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序一個(gè)主變
6、量有可能既是輸入主變量又是輸出主變量主變量(續(xù))主變量的用途輸入主變量指定向數(shù)據(jù)庫(kù)中插入的數(shù)據(jù)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改為指定值指定執(zhí)行的操作指定WHERE子句或HAVING子句中的條件輸出主變量獲取SQL語(yǔ)句的結(jié)果數(shù)據(jù)獲取SQL語(yǔ)句的執(zhí)行狀態(tài)主變量(續(xù))指示變量一個(gè)主變量可以附帶一個(gè)指示變量(IndicatorVariable)什么是指示變量整型變量用來(lái)“指示”所指主變量的值或條件指示變量的用途輸入主變量可以利用指示變量賦空值輸出主變量可以利用指示變量檢測(cè)出是否空值,值是否被截?cái)嘀髯兞浚ɡm(xù))在SQL語(yǔ)句中使用主變量和指示變量的方法1)說(shuō)明主變量和指示變量BEGINDEC
7、LARESECTION..................(說(shuō)明主變量和指示變量).........ENDDECLARESECTION主變量(續(xù))2)使用主變量說(shuō)明之后的主變量可以在SQL語(yǔ)句中任何一個(gè)能夠使用表達(dá)式的地方出現(xiàn)為了與數(shù)據(jù)庫(kù)對(duì)象名(表名、視圖名、列名等)區(qū)別,SQL語(yǔ)句中的主變量名前要加冒號(hào)(:)作為標(biāo)志3.游標(biāo)(cursor)為什么要使用游標(biāo)SQL語(yǔ)言與主語(yǔ)言具有不同數(shù)據(jù)處理方式SQL語(yǔ)言是面向集合的,一條SQL語(yǔ)句原則上可以產(chǎn)生或處理多條記錄游標(biāo)(續(xù))主語(yǔ)言是面向記錄的,一組主變量一次只能存放一條記錄僅使用主變量并不能完全滿(mǎn)足SQL語(yǔ)句向應(yīng)用程