資源描述:
《數(shù)據(jù)庫(kù)應(yīng)用技術(shù) 嵌入式SQL簡(jiǎn)介.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、嵌入式SQL簡(jiǎn)介SQL的兩種使用方式:自含式嵌入式將SQL嵌入到宿主語(yǔ)言中使用必須解決的問(wèn)題:如何區(qū)分宿主語(yǔ)言的語(yǔ)句和SQL的語(yǔ)句,并能將嵌入有SQL的宿主語(yǔ)言源程序編譯成為可執(zhí)行代碼。宿主語(yǔ)言與數(shù)據(jù)庫(kù)管理系統(tǒng)之間如何進(jìn)行通信,使得SQL語(yǔ)句中能夠使用宿主語(yǔ)言的變量。如何協(xié)調(diào)宿主語(yǔ)言的單記錄處理方式和SQL集合處理方式之間的差異。如何進(jìn)行宿主語(yǔ)言與SQL之間數(shù)據(jù)類型的轉(zhuǎn)換。1第3章結(jié)構(gòu)化查詢語(yǔ)言SQL嵌入式SQL的說(shuō)明語(yǔ)句為了能夠區(qū)分C語(yǔ)言的語(yǔ)句和SQL的語(yǔ)句,規(guī)定SQL的語(yǔ)句前面加上標(biāo)識(shí)“EX
2、ECSQL”,語(yǔ)句的結(jié)尾加上分號(hào)“;”作為語(yǔ)句的結(jié)束標(biāo)識(shí)。C語(yǔ)言和SQL之間的數(shù)據(jù)通信通過(guò)宿主變量來(lái)實(shí)現(xiàn)。宿主變量是SQL中能夠引用的C語(yǔ)言變量。宿主變量需要使用帶有標(biāo)識(shí)“EXECSQL”的說(shuō)明語(yǔ)句說(shuō)明。在SQL中引用宿主變量時(shí),在宿主變量前面需加上一個(gè)冒號(hào)“:”作為標(biāo)識(shí),以區(qū)別于數(shù)據(jù)庫(kù)中的變量(如屬性名)。在C語(yǔ)言的語(yǔ)句中,宿主變量與其他變量同樣使用。宿主變量的類型按照C語(yǔ)言的數(shù)據(jù)類型定義,如果與數(shù)據(jù)庫(kù)中的數(shù)據(jù)類型不一致,則由數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行轉(zhuǎn)換。對(duì)C語(yǔ)言而言,通常不允許把宿主變量定義為數(shù)組
3、或結(jié)構(gòu)類型。2第3章結(jié)構(gòu)化查詢語(yǔ)言SQL嵌入式SQL的說(shuō)明語(yǔ)句舉例〖例3-33〗在C語(yǔ)言中對(duì)SQL用到的宿主變量說(shuō)明語(yǔ)句的例子:EXECSQLBEGINDECLARESECTION;charSNO[9];charNAME[9];charCNO[6];floatGRADE;EXECSQLENDDECLARESECTION;3第3章結(jié)構(gòu)化查詢語(yǔ)言SQL嵌入式SQL的可執(zhí)行語(yǔ)句游標(biāo):在嵌入式SQL中,把存放查詢結(jié)果的區(qū)域及其相應(yīng)的數(shù)據(jù)結(jié)構(gòu)或者指示已取元組位置的指示器稱為游標(biāo)。游標(biāo)操作語(yǔ)句:定義游標(biāo)語(yǔ)句
4、:EXECSQLDECLARE<游標(biāo)名>CURSORFOR
5、能:從指定的基本表或視圖中找到符合條件的元組,并把查詢結(jié)果存放到指定的宿主變量中。注意:宿主變量前面要加上前綴標(biāo)識(shí)冒號(hào)“:”,以區(qū)別于屬性名等數(shù)據(jù)庫(kù)中的變量;宿主變量要在主程序中定義并用SQL的DECLARE語(yǔ)句加以說(shuō)明。其他不需要使用游標(biāo)的UPDATE語(yǔ)句、DELETE語(yǔ)句和INSERT語(yǔ)句。只要按照規(guī)定加上前綴標(biāo)識(shí)“EXECSQL”和結(jié)束標(biāo)識(shí)“;”或“END_EXEC”,并且在引用宿主變量時(shí)加上前綴標(biāo)識(shí)“:”,就能夠嵌入C語(yǔ)言或其他宿主語(yǔ)言中使用。5第3章結(jié)構(gòu)化查詢語(yǔ)言SQL不用游標(biāo)的DML
6、語(yǔ)句舉例〖例3-34〗根據(jù)宿主變量givensno的值在基本表S中查詢?cè)搶W(xué)生的姓名、性別、年齡和系別。EXECSQLSELECT姓名,年齡,性別,系別INTO:sname,:sage,::ssex,departmentFROMSWHERES.學(xué)號(hào)=:givensno;6第3章結(jié)構(gòu)化查詢語(yǔ)言SQL不用游標(biāo)的DML語(yǔ)句舉例〖例3-35〗把基本表S中計(jì)算機(jī)科學(xué)與工程系學(xué)生的年齡加上宿主變量raise的值。EXECSQLUPDATESSET年齡=年齡+:raiseFROMSWHERES.系別=‘計(jì)算機(jī)科
7、學(xué)與工程系’;7第3章結(jié)構(gòu)化查詢語(yǔ)言SQL不用游標(biāo)的DML語(yǔ)句舉例〖例3-36〗根據(jù)宿主變量dept中所給出的系名,刪除該系所有學(xué)生在基本表SC中的選課記錄。EXECSQLDELETEFROMSCWHERE:dept=(SELECT系別FROMSWHERES.學(xué)號(hào)=SC.學(xué)號(hào));8第3章結(jié)構(gòu)化查詢語(yǔ)言SQL不用游標(biāo)的DML語(yǔ)句舉例〖例3-37〗把一名新生的記錄插入基本表S中,該生的簡(jiǎn)況由一組宿主變量givensnosname、sage、ssex、department給出。EXECSQLINSER
8、TINTOS(學(xué)號(hào),姓名,年齡,性別,系別)VALUES(:givensno,:sname,:sage,:ssex,:department)9第3章結(jié)構(gòu)化查詢語(yǔ)言SQL使用游標(biāo)的DML語(yǔ)句舉例〖例3-38〗根據(jù)宿主變量dept中所給出的系名,查詢?cè)撓邓袑W(xué)生在基本表S中的全部信息。EXECSQLDECLAREstudentCURSORFORSELECT學(xué)號(hào),姓名,年齡,性別,系別FROMSWHERE系別=:dept;EXECSQLOPENstudent;while<條件表達(dá)式>{EXECSQLF