




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Execsql/c【嵌入SQL】概念:利用高級語言的過程性結(jié)構(gòu)來彌補(bǔ)SQL語言實現(xiàn)復(fù)雜應(yīng)用方面的不足。嵌入SQL的高級語言稱為主語言或宿主語言。在混合編程中,SQL語句負(fù)責(zé)操作數(shù)據(jù)庫,高級語言語句負(fù)責(zé)控制程序流程。預(yù)編譯方法由DBMS的預(yù)處理程序?qū)υ闯绦驋呙?,識別出SQL語句,把它們轉(zhuǎn)換成主語言調(diào)用語句,以使主語言編譯器能識別它,最后由主語言編譯器將整個源程序編譯成目標(biāo)碼。嵌入式SQL的一般形式所有的嵌入式SQL語句都必須加前綴EXECSQL在C語言中:EXECSQLSQL語句例如:EXECSQLDROPTABLEStudent;嵌入式SQL與主語言的通信1:向主語言傳遞SQL語句執(zhí)行狀態(tài)信息
2、【狀態(tài)信息】,使語言能夠據(jù)此信息控制程序流程,用SQL通信區(qū)(SQLCA【SQLCommunicationArea)實現(xiàn)。2:主語言向SQL語句提供參數(shù),主要用主變量(HostVariable)實現(xiàn);3:將SQL語句查詢數(shù)據(jù)庫的結(jié)果交主語言進(jìn)一步處理,主要用主變量和游標(biāo)(Cursor)實現(xiàn)。SQL通信區(qū)SQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的變量SQLCODE。每次執(zhí)行完SQL語句后都應(yīng)該測試一下SQLCODE的值,以了解該SQL語句執(zhí)行情況并做相應(yīng)處理,如果SQLCODE等于預(yù)定的常量SUCCESS,則表示SQL語句成功,否則在SQLCODE中存放錯誤代碼。SQLCA(SQLCo
3、mmunicationAccess)系由系統(tǒng)提供之系統(tǒng)記錄架構(gòu),作為backend與frontend之間溝通之用,當(dāng)發(fā)生I/O狀態(tài)時,系統(tǒng)會記錄該狀態(tài)于SQLCA中,frontend即可依據(jù)其其內(nèi)容得知I/O運作是否成功,再決定往后執(zhí)行的步驟。SQLCA為系統(tǒng)定義之GLOBAL變量,以下為其架構(gòu)并介紹其內(nèi)容與用途:SQLCA結(jié)構(gòu)DEFINESQLCARECORDSQLCODESQLERRMSQLERRPSQLERRDSQLAWARNENDRECORDINTEGER,CHAR(71),CHAR(8),ARRAY6OFINTEGER,CHAR(8)SQLCODE表示I/O的結(jié)果;返回值說明0表示I
4、/O成功100表示NOTFOUND0I/O失敗SQLERRM:保留未用SQLERRP:保留未用SQLERRD:為一個含有6個INTEGER數(shù)組SQLERRD1:保留未用SQLERRD2:新增時SERIAL字段所傳回之值SQLERRD3:處理資料的筆數(shù)SQLERRD4:查詢時預(yù)估的CPUCOSTSQLERRD5:SQL指令之錯誤位移SQLERRD6:最后一個ROWID值SQLAWARN:含有8個字符記錄I/O時產(chǎn)生的警告訊息為一個含有8個字符的字符串,以記錄I/O時產(chǎn)生的警告訊息。若正確無誤,則相對應(yīng)之字符設(shè)定為空白,否則會被設(shè)定為”W”。SQLAWARN1:若第2至第8字符中任意一個被設(shè)成W,
5、則此字符亦為W,否則為空白。SQLAWARN2:若資料太長而被截掉時,會被設(shè)成W。SQLAWARN3:若aggregatefunction(如SUM,AVG,MAX,MIN)處理時遇到NULL值,則會被設(shè)成W。SQLAWARN4:若查詢時,若欲查詢的字段數(shù)目和INTO之變量數(shù)目不合時,會被設(shè)成W。SQLAWARN5:如轉(zhuǎn)換float成integer時,則會被設(shè)成W。SQLAWARN6:保留未用SQLAWARN7:保留未用SQLAWARN8:保留未用主變量一個主變量既可是輸入主變量也可是輸出主變量。主變量必須在SQL語句EXECSQLBEGINDECLARESECTION與EXECSQLENDD
6、ECLARESECTION之間進(jìn)行說明。例如:EXECSQLBEGINDECLARESECTION;inti=0;EXECSQLENDDECLARESECTION;SQL語句的主變量名前要加冒號作為標(biāo)志?!驹趕ql語句中】在SQL語句之外,主變量直接引用,不須加冒號。使用游標(biāo)查詢以下是運用游標(biāo)查詢的一個完整實例的過程。【定義游標(biāo)-打開游標(biāo)-推進(jìn)游標(biāo)-關(guān)閉游標(biāo)-釋放游標(biāo)】/定義游標(biāo)EXECSQLDECLAREcurCURSORFORselectname,sexfromstudentwherenolike:no;EXECSQLOPENcur;/打開游標(biāo)for(;)EXECSQLfetchcurin
7、to:name,:sex;推進(jìn)游標(biāo)if(sqlca.sqlcode=100)沒有滿足條件的數(shù)據(jù)break;/操作數(shù)據(jù)EXECSQLclosecur;/關(guān)閉游標(biāo)EXECSQLfreecur;/釋放游標(biāo)使用事務(wù)事務(wù)的三個常用操作:開始事務(wù)(BEGINWORK);提交事務(wù)(COMMITWORK);回滾(ROLLBACKWORK);例如:EXECSQLBEGINWORK;/數(shù)據(jù)庫操作if(sqlca.sqlcode0)EXECSQLROLLBACKWORK;elseEXECSQLCOMMITWORK;CURRENT形式的UPDATE語句和DELETE語句UPDATE和DELETE語句都是集合操作,如果
8、只想修改或刪除其中的某個記錄,則需要用帶游標(biāo)的SELECT語句查出所有滿足條件記錄,從中進(jìn)一步找出要修改或刪除的記錄,然后用CURRENT形式的UPDATE和DELETE語句處理。步驟:1:用DELCARE語句說明游標(biāo)。如果是為CURRENT形式的UPDATE語句作準(zhǔn)備,則SELECT語句中要用FORUPDATEOFv列名用來指明查詢出的數(shù)據(jù)在指定列是可修改的。如果是為CURRENT形式的DELETE語句作準(zhǔn)備,則不必使用上述子句。2:檢查該記錄是否為該修改或刪除的記錄。如果是,則修改或刪除之。這時UPDATE和DELETE語句中要用子句WHERECURRENTOFv游標(biāo)名,表示修改或刪除的是
9、最近一次取出的記錄,即游標(biāo)指針指向的記錄。例如:更新操作charyn;EXECSQLBEGINDELCARESECTION;/申明主變量charSno20,Sname20,NEWSname20;EXECSQLENDDECLARESECTION;/運用游標(biāo)進(jìn)行查詢記錄EXECSQLDECLAREcurCURSORFORSELECTSno,SnameFROMStudentWHERESnolike01%FORUPDATEOFSname;EXECSQLOPENcur;打開游標(biāo)while(1)/*用循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中的記錄*/EXECSQLFETCHcurINTO:Sno,:Sname;if(sq
10、lca.sqlcode=100)break;/*若查詢結(jié)果處理完或出現(xiàn)錯誤,則退出循環(huán)*/printf(no=%s,name=%s,Sno,Sname);printf(UPDATEName(y/n)?);/*問用戶是否需要修改*/scanf(%c,&yn);if(yn=yoryn=Y)/*需要修改*/printf(INPUTNEWName:);scanf(%d,&NEWSname);EXECSQLUPDATEStudentSETSname=:NEWSnameWHERECURRENTOFcur;EXECSQLCLOSEcur;數(shù)據(jù)類型1、SQL與C數(shù)據(jù)類型的對應(yīng)簡單類型SQLCCHAR(n)ch
11、ar(n+l)CHARCTER(n)char*SMALLINTshortINTERGERintSMALLFLOATfloatFLOAT/DOUBLEdoubleSERIALlongintDATElongintVARCHARstring2、數(shù)據(jù)類型轉(zhuǎn)換轉(zhuǎn)換類型轉(zhuǎn)換后FLOATDECIMAL(16)SMALLFLOATDECIMAL(8)INTERGERDECIMAL(10,0)SAMLLINTDECIMAL(5,0)有關(guān)CHAR類型的函數(shù)1、以空值結(jié)尾的串的操作函數(shù)rdownshift(char*s)把一個字符串中的所有字母轉(zhuǎn)換成小寫形式。rupshift(char*s)把一個字符串中的所有字母
12、轉(zhuǎn)換成大寫形式。stcat(char*s,char*dest)把一個字符串同另一個字符串相連接。stcmpr(char*s1,char*s2)比較兩個字符串。stcopy(char*from,char*to)把一個字符串拷貝到另一個字符串。stleng(char*string)統(tǒng)計字符串的長度。2、定長串的操作函數(shù)bycmpr(charbyte1,byte2,rptlen)比較兩組連續(xù)的字節(jié)內(nèi)存塊。bycopy(char*from,char*to,intlen)把一塊內(nèi)存的內(nèi)容拷貝到另一塊內(nèi)存。byfill(char*to,intlen,charch)用字符填充指定的內(nèi)存塊。byleng(charfrom,intcount)統(tǒng)計有效字符的數(shù)目。有效字符是指字符串去除了末尾空格所剩的字符3、字符串操作函數(shù)ldchar(char*from,intnum,char*to)拷貝定長串到空值結(jié)尾的串。stchar(cha
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度企業(yè)導(dǎo)師制師帶徒培養(yǎng)合同
- 2025年度人合作合伙合同:清潔能源項目投資合作框架
- 2025年度醫(yī)療護(hù)理勞務(wù)合同患者安全與權(quán)益保障合同
- 2025年度倉儲物流轉(zhuǎn)租服務(wù)合同
- 2025年度店面轉(zhuǎn)讓定金支付及品牌戰(zhàn)略合作協(xié)議
- 2025年度倉儲設(shè)施使用權(quán)及倉儲倉儲服務(wù)協(xié)議
- 2025年杭州醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫完整版
- 2025年度個人短期租房合同月付與租戶退租流程管理協(xié)議
- 2025年度合伙投資開中式餐廳合作協(xié)議
- 2025年度互聯(lián)網(wǎng)企業(yè)產(chǎn)品經(jīng)理崗位聘用合同
- 現(xiàn)場施工環(huán)境保護(hù)應(yīng)急預(yù)案
- 危險廢物綜合利用與處置技術(shù)規(guī)范 通則
- 植物組織培養(yǎng)技術(shù)應(yīng)用研究進(jìn)展
- 教育心理學(xué)課件(完整版)
- YYT 1898-2024 血管內(nèi)導(dǎo)管導(dǎo)絲 親水性涂層牢固度試驗方法
- 2023年安徽電氣工程職業(yè)技術(shù)學(xué)院單招職業(yè)技能試題及答案解析
- JIS-D1601-1995-汽車零部件振動試驗方法
- 高血壓腎病護(hù)理查房課件
- 基坑開挖影響周邊環(huán)境與建筑物研究
- 《民事訴訟法》課件
- 環(huán)保合規(guī)與企業(yè)風(fēng)險管理
評論
0/150
提交評論