![合工大數(shù)據(jù)庫課件_第1頁](http://file4.renrendoc.com/view/520ba578737824d0cd6b23a3ee82b0a7/520ba578737824d0cd6b23a3ee82b0a71.gif)
![合工大數(shù)據(jù)庫課件_第2頁](http://file4.renrendoc.com/view/520ba578737824d0cd6b23a3ee82b0a7/520ba578737824d0cd6b23a3ee82b0a72.gif)
![合工大數(shù)據(jù)庫課件_第3頁](http://file4.renrendoc.com/view/520ba578737824d0cd6b23a3ee82b0a7/520ba578737824d0cd6b23a3ee82b0a73.gif)
![合工大數(shù)據(jù)庫課件_第4頁](http://file4.renrendoc.com/view/520ba578737824d0cd6b23a3ee82b0a7/520ba578737824d0cd6b23a3ee82b0a74.gif)
![合工大數(shù)據(jù)庫課件_第5頁](http://file4.renrendoc.com/view/520ba578737824d0cd6b23a3ee82b0a7/520ba578737824d0cd6b23a3ee82b0a75.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第八講數(shù)據(jù)庫編程沈明玉數(shù)據(jù)庫編程一、嵌入式SQL二、PL/SQL與Transact-SQL三、存儲過程四、事務(wù)的概念與使用數(shù)據(jù)庫編程一、嵌入式SQL嵌入式SQL什么是嵌入式SQL?
交互式SQL和嵌入式SQL是SQL的兩種使用方法。當(dāng)一個程序既要訪問數(shù)據(jù)庫,又要處理數(shù)據(jù)時,將SQL語言嵌入到程序設(shè)計(jì)語言(宿主語言)中,將SQL語言訪問數(shù)據(jù)庫的功能和宿主語言的數(shù)據(jù)處理功能相結(jié)合,這種使用SQL的方法稱為嵌入式SQL。嵌入式SQL(續(xù))如何實(shí)現(xiàn)嵌入式SQL?宿主語言的編譯器不能識別SQL,如何將嵌有SQL語句的宿主語言編譯成可執(zhí)行代碼?宿主語言與DBMS之間如何傳遞數(shù)據(jù)和信息?如何解決元組集合數(shù)據(jù)對宿主語言變量的賦值?在宿主語言中標(biāo)注SQL語句的方法用EXECSQL前綴來標(biāo)識SQL語句,以區(qū)分宿主語言與SQL語言。嵌入式SQL(續(xù))嵌入式SQL的處理過程嵌入式SQL(續(xù))宿主語言與DBMS之間如何通信?SQL通信區(qū)(SQLCA)SQLCA是一個數(shù)據(jù)結(jié)構(gòu)SQLCA的用途描述系統(tǒng)當(dāng)前工作狀態(tài)描述運(yùn)行環(huán)境SQLCA使用方法定義SQLCA:ExecSQLIncludeSQLCA使用SQLCA:變量SQLCODE,為0-執(zhí)行成功,否則表示出錯。嵌入式SQL(續(xù))共享變量(主變量)宿主語言與SQL語言之間通過共享變量進(jìn)行數(shù)據(jù)傳送;共享變量由宿主語言程序定義,用SQL的Declare說明后可在SQL語句中引用(引用時需加':'號,以區(qū)分?jǐn)?shù)據(jù)庫自身的變量,如:屬性)。嵌入式SQL(續(xù))嵌入式SQL的實(shí)現(xiàn)方法說明部分定義共享變量、環(huán)境變量、游標(biāo)等。ExecSQLBeginDeclareSection;charsno[10],sname[20];intsage;ExecSQLEndDeclareSection;嵌入式SQL(續(xù))執(zhí)行部分:各種SQL語句的執(zhí)行ExecSQLInsertintoStudents(sno,sname,sage)values(:sno,:sname,:sage);ExecSQLUpdateStudentsSETsname=:sname,sage=:sageWheresno=:sno;ExecSQLDeletefromSCWheresno=(SelectsnofromStudentWheresno=:sno);ExecSQLSelectsname,sageinto:sname,:sagefromStudentsWheresno=:sno;嵌入式SQL(續(xù))使用游標(biāo)(cursor)的SQL編程解決多對一的問題!說明游標(biāo)語句:ExecSQLDeclare<游標(biāo)名>CursorforSelect…from…Where…;打開游標(biāo)語句:ExecSQLOpen<游標(biāo)名>;推進(jìn)游標(biāo)語句:ExecSQLFetch<游標(biāo)名>into<變量表>;關(guān)閉游標(biāo)語句:ExecSQLClose<游標(biāo)名>;嵌入式SQL(續(xù))建立數(shù)據(jù)庫連接
ExecSQLConnectTOtarget[ASconnection-name][Useruser-name];
target是要連接的數(shù)據(jù)庫服務(wù)器:常見的服務(wù)器標(biāo)識串,如<dbname>@<hostname>:<port>connect-name是可選的連接名,連接必須是一個有效的標(biāo)識符在整個程序內(nèi)只有一個連接時可以不指定連接名。嵌入式SQL(續(xù))關(guān)閉數(shù)據(jù)庫連接
ExecSQLDisconnect[connection];程序運(yùn)行過程中可以修改當(dāng)前連接 ExecSQLSetConnectionconnection-name|DEFAULT;嵌入式SQL(續(xù))[例]依次檢查某個系的學(xué)生記錄,交互式更新某些學(xué)生年齡。EXECSQLBEGINDECLARESECTION;/*主變量說明開始*/ chardeptname[64]; charHSno[64]; charHSname[64]; charHSsex[64]; int HSage; int NEWAGE;EXECSQLENDDECLARESECTION;/*主變量說明結(jié)束*/longSQLCODE;EXECSQLINCLUDEsqlca;/*定義SQL通信區(qū)*/嵌入式SQL(續(xù))intmain(void)/*C語言主程序開始*/{ int count=0; charyn;/*變量yn代表yes或no*/ printf("Pleasechoosethedepartmentname(CS/MA/IS):"); scanf("%s",deptname);/*為主變量deptname賦值*/ EXECSQLCONNECTTOTEST@localhost:54321USER"SYSTEM"/"MANAGER";/*連接數(shù)據(jù)庫TEST*/ EXECSQLDECLARESXCURSORFOR/*定義游標(biāo)*/ SELECTSno,Sname,Ssex,Sage/*SX對應(yīng)語句的執(zhí)行結(jié)果*/ FROMStudent WHERESDept=:deptname; EXECSQLOPENSX;/*打開游標(biāo)SX便指向查詢結(jié)果的第一行*/嵌入式SQL(續(xù))for(;;) /*用循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中的記錄*/{ EXECSQLFETCHSXINTO:HSno,:HSname,:HSsex,:HSage; /*推進(jìn)游標(biāo),將當(dāng)前數(shù)據(jù)放入主變量*/ if(sqlca.sqlcode!=0)/*sqlcode!=0,表示操作不成功*/ break; /*利用SQLCA中的狀態(tài)信息決定何時退出循環(huán)*/ if(count++==0)/*如果是第一行的話,先打出行頭*/ printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex","Sage"); printf("%-10s%-20s%-10s%-10d\n",HSno,HSname,HSsex,HSage); /*打印查詢結(jié)果*/ printf("UPDATEAGE(y/n)?");/*詢問用戶是否要更新該學(xué)生的年齡*/ do{ scanf("%c",&yn); }while(yn!='N'&&yn!='n'&&yn!='Y'&&yn!='y');嵌入式SQL(續(xù)) if(yn=='y'||yn=='Y')/*如果選擇更新操作*/ { printf("INPUTNEWAGE:"); scanf("%d",&NEWAGE);/*用戶輸入新年齡到主變量中*/ EXECSQLUPDATEStudent /*嵌入式SQL*/ SETSage=:NEWAGEWHERECURRENTOFSX; }/*對當(dāng)前游標(biāo)指向的學(xué)生年齡進(jìn)行更新*/}EXECSQLCLOSESX;/*關(guān)閉游標(biāo)SX不再和查詢結(jié)果對應(yīng)*/ EXECSQLCOMMITWORK;/*提交更新*/ EXECSQLDISCONNECTTEST;/*斷開數(shù)據(jù)庫連接*/}數(shù)據(jù)庫編程二、PL/SQL與Transact-SQLPL/SQL與Transact-SQLPL/SQLPL/SQL是Oracle對標(biāo)準(zhǔn)SQL的過程化擴(kuò)充,它將數(shù)據(jù)庫技術(shù)和過程化程序設(shè)計(jì)語言聯(lián)系起來,可使用循環(huán)、分支和嵌套,將SQL的數(shù)據(jù)操縱功能與過程化語言數(shù)據(jù)處理功能相結(jié)合。PL/SQL與Transact-SQL(續(xù))PL/SQL的作用能夠使一組SQL語句的功能更具模塊化程序特點(diǎn);采用了過程性語言控制程序的結(jié)構(gòu);可以對程序中的錯誤進(jìn)行自動處理,使程序能夠在遇到錯誤的時候不會被中斷;具有較好的可移植性,可以移植到另一個Oracle數(shù)據(jù)庫中;集成在數(shù)據(jù)庫中,調(diào)用更快;減少了網(wǎng)絡(luò)的交互,有助于提高程序性能。PL/SQL與Transact-SQL(續(xù))PL/SQL程序的基本結(jié)構(gòu)DECLARE—可選部分變量、常量、游標(biāo)、用戶定義異常的聲明……BEGIN—必要部分SQL語句和PL/SQL語句構(gòu)成的執(zhí)行程序……EXCEPTION—可選部分程序出現(xiàn)異常時,捕捉異常并處理異?!璄ND;—必須部分PL/SQL與Transact-SQL(續(xù))PL/SQL的變量簡單變量格式:變量名[constant]變量類型[notnull][default值|:=值]v_namevarchar2(10);v_ageconstantnumber:=20;v_sexchar(2)default'男';
PL/SQL與Transact-SQL(續(xù))復(fù)合變量布爾類型:v_tfboolean;type類型:
v_snostudents.sno%type;rowtype類型:v_scsc%rowtype;(使用:v_sc.sno)PL/SQL與Transact-SQL(續(xù))PL/SQL的語句賦值語句:變量名稱:=表達(dá)式v_sno:='20090080';條件語句:IF-THEN,IF-THEN-ELSE和嵌套的IF語句IF(new.Job=‘講師')AND(new.Sal<3000)THENnew.Sal:=3000;ENDIF;
PL/SQL與Transact-SQL(續(xù))分支語句:Casewhen條件表達(dá)式1then……when條件表達(dá)式nthen……else……Endcase;PL/SQL與Transact-SQL(續(xù))11循環(huán)語句:基本loop循環(huán)Loop語句1;語句2;……exit[when條件];Endloop;PL/SQL與Transact-SQL(續(xù))Forloop循環(huán):For控制變量in[reverse]下限..上限loop語句1;……語句n;Endloop;PL/SQL與Transact-SQL(續(xù))Whileloop循環(huán):While條件loop語句1;……語句n;Endloop;PL/SQL與Transact-SQL(續(xù))異常處理
EXCEPTION
WHENexception_nameTHEN
Codeforhandingexception_name;
[WHENanother_exceptionTHEN
Codeforhandinganother_exception];
[W
溫馨提示
- 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-2030全球電子鎮(zhèn)痛泵行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國正照式CMOS制冷相機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球生活用紙頭膠行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國奧美沙坦酯氫氯噻嗪片行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球帆布繪畫套件行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國防靜電HPL架空地板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球ADAS清洗系統(tǒng)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國TGV激光微孔設(shè)備行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國導(dǎo)熱平臺和導(dǎo)熱板行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國13C-尿素呼氣測試試劑盒行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 腫瘤中醫(yī)治療及調(diào)養(yǎng)
- DB21-T 1720-2017海水源熱泵系統(tǒng)工程技術(shù)規(guī)程
- 組長競選課件教學(xué)課件
- 2022年公務(wù)員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 2024 ESC慢性冠脈綜合征指南解讀(全)
- 北師大版四年級下冊數(shù)學(xué)第一單元測試卷帶答案
- 術(shù)后肺炎預(yù)防和控制專家共識解讀課件
- 中石化高級職稱英語考試
- 小學(xué)五年級英語閱讀理解(帶答案)
- 2024二十屆三中全會知識競賽題庫及答案
- 2024年全國統(tǒng)一考試高考新課標(biāo)Ⅱ卷語文+數(shù)學(xué)+英語試題(真題+答案)
評論
0/150
提交評論