資源描述:
《E-SQL編程技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、中國農(nóng)業(yè)銀行Sybase數(shù)據(jù)庫技術(shù)培訓(xùn)——E-SQL/C編程技術(shù)王兵wangb@global-tec.net1590118532913671101290北京寰信通科技有限公司BeijingGlobalTechnologyCo.Ltd.2009年6月1日GlobalTechnologyPage1內(nèi)容提要?什么是E-SQL?E-SQL編程基礎(chǔ)∑E-SQL一般規(guī)則∑建立SQL通信區(qū)∑定義變量∑連接數(shù)據(jù)庫∑執(zhí)行SQL語句∑處理錯(cuò)誤?E-SQL編程專題∑游標(biāo)的使用∑事物∑動(dòng)態(tài)SQLGlobalTechnologyPage2什么是E-SQL?EmbeddedSQL是一種數(shù)據(jù)庫客戶端編程接
2、口。它在C或C++語言的源程序文件中嵌入SQL命令,通過預(yù)處理器把SQL語句翻譯成對(duì)運(yùn)行時(shí)庫(runtimelibrary)的函數(shù)調(diào)用,然后通過C或C++語言編譯器進(jìn)行編譯和連接?EmbeddedSQL是ISO/ANSI和IBM標(biāo)準(zhǔn)?EmbeddedSQL可移植到其他數(shù)據(jù)庫和操作系統(tǒng)平臺(tái),并且在所有環(huán)境下具有相同的功能性。GlobalTechnologyPage3E-SQL優(yōu)點(diǎn)?嵌入SQL易于使用?ANSI/ISO標(biāo)準(zhǔn)化編程語言?與調(diào)用相比,編碼更少?幾乎與宿主語言無關(guān),對(duì)不同的語言,它的語法改變非常少?預(yù)編譯器通過生成存儲(chǔ)過程,優(yōu)化它的執(zhí)行GlobalTechnologyP
3、age4開發(fā)E-SQL應(yīng)用程序的過程?編寫E-SQL程序?保存為.cp為后綴的文件(建議)?預(yù)編譯?編譯?連接Client-Library?如果你選擇生成存儲(chǔ)過程,執(zhí)行生成的腳本以在數(shù)據(jù)庫中生成它們(可選)?運(yùn)行生成的程序GlobalTechnologyPage5E-SQL編程基礎(chǔ)?E-SQL一般規(guī)則?建立SQL通信區(qū)?使用變量?連接數(shù)據(jù)庫?執(zhí)行T-SQL語句?處理錯(cuò)誤GlobalTechnologyPage6E-SQL一般規(guī)則?以execsql開頭?以;結(jié)尾?標(biāo)號(hào)可以放在execsql前面?大小寫不敏感GlobalTechnologyPage7SQL通訊區(qū)?是一個(gè)內(nèi)存區(qū),用
4、于存放客戶端和數(shù)據(jù)庫服務(wù)器交互時(shí)的狀態(tài)信息∑數(shù)據(jù)庫服務(wù)器執(zhí)行完每一個(gè)EmbeddedSQL語句之后它會(huì)在SQL通訊區(qū)中存儲(chǔ)返回代碼和返回信息(包括警告和錯(cuò)誤信息)∑E-SQL應(yīng)用可以從SQL通訊區(qū)獲得數(shù)據(jù)庫服務(wù)器執(zhí)行EmbeddedSQLs的情況(是成功還是失敗)GlobalTechnologyPage8SQL通訊區(qū)?SQL通訊區(qū)定義為一個(gè)C語言結(jié)構(gòu)typedefstruct_sqlca{charsqlcaid[8];//包含自符串”sqlca”longsqlcabc;//SQLCA結(jié)構(gòu)的長(zhǎng)度longsqlcode;//存放最近執(zhí)行SQL語句的返回代碼0:執(zhí)行成功;-n:發(fā)生
5、//錯(cuò)誤,n為錯(cuò)誤消息號(hào);+100:沒有數(shù)據(jù)存在struct{longsqlerrml;//錯(cuò)誤消息長(zhǎng)度charsqlerrmc[256];//存放錯(cuò)誤消息}sqlerrm;charsqlerrp[8];longsqlerrd[6];//錯(cuò)誤或警告的細(xì)節(jié)charsqlwarn[8];//警告標(biāo)志charsqlext[8];//保留}SQLCA;GlobalTechnologyPage9SQL通訊區(qū)?SQLCA結(jié)構(gòu)的聲明∑EXECSQLINCLUDESQLCA;?SQLCA的使用∑結(jié)構(gòu)變量名是sqlca,使用C語法訪問其成員∑例如:if(sqlca.sqlcode==100){
6、printf("t**Can'tfindtitle'%s'.",m_titleid);return;}if(sqlca.sqlwarn[1]=='W'){fprintf(stderr,"**Datatruncated.");}if(sqlca.sqlwarn[3]=='W'){fprintf(stderr,"**Insufficienthostvariablestostoreresults.");}GlobalTechnologyPage10SQL通訊區(qū)?SQLCODE:SQLCA的替代方法∑不定義SQLCA結(jié)構(gòu),使用單獨(dú)定義的SQLCODE也可以得
7、到最近一次查詢的返回狀態(tài);∑好處V使用SQLCODE的好處是執(zhí)行速度快∑何時(shí)使用V只需要語句的returncode,不需要SQLCA結(jié)構(gòu)中的其它信息∑使用方法longSQLCODE;//0,-n,100execsqlopencursorpub_id;while(SQLCODE==0){execsqlfetchpub_idinto:pub_name;}GlobalTechnologyPage11使用變量?變量種類∑宿主語言變量(Hostvariables)V使用在E-SQL語句中的宿主語言變量V用于保存從