




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第八講數(shù)據(jù)庫(kù)編程沈明玉數(shù)據(jù)庫(kù)編程一、嵌入式SQL二、PL/SQL與Transact-SQL三、存儲(chǔ)過程四、事務(wù)的概念與使用數(shù)據(jù)庫(kù)編程一、嵌入式SQL嵌入式SQL什么是嵌入式SQL?
交互式SQL和嵌入式SQL是SQL的兩種使用方法。當(dāng)一個(gè)程序既要訪問數(shù)據(jù)庫(kù),又要處理數(shù)據(jù)時(shí),將SQL語(yǔ)言嵌入到程序設(shè)計(jì)語(yǔ)言(宿主語(yǔ)言)中,將SQL語(yǔ)言訪問數(shù)據(jù)庫(kù)的功能和宿主語(yǔ)言的數(shù)據(jù)處理功能相結(jié)合,這種使用SQL的方法稱為嵌入式SQL。嵌入式SQL(續(xù))如何實(shí)現(xiàn)嵌入式SQL?宿主語(yǔ)言的編譯器不能識(shí)別SQL,如何將嵌有SQL語(yǔ)句的宿主語(yǔ)言編譯成可執(zhí)行代碼?宿主語(yǔ)言與DBMS之間如何傳遞數(shù)據(jù)和信息?如何解決元組集合數(shù)據(jù)對(duì)宿主語(yǔ)言變量的賦值?在宿主語(yǔ)言中標(biāo)注SQL語(yǔ)句的方法用EXECSQL前綴來標(biāo)識(shí)SQL語(yǔ)句,以區(qū)分宿主語(yǔ)言與SQL語(yǔ)言。嵌入式SQL(續(xù))嵌入式SQL的處理過程嵌入式SQL(續(xù))宿主語(yǔ)言與DBMS之間如何通信?SQL通信區(qū)(SQLCA)SQLCA是一個(gè)數(shù)據(jù)結(jié)構(gòu)SQLCA的用途描述系統(tǒng)當(dāng)前工作狀態(tài)描述運(yùn)行環(huán)境SQLCA使用方法定義SQLCA:ExecSQLIncludeSQLCA使用SQLCA:變量SQLCODE,為0-執(zhí)行成功,否則表示出錯(cuò)。嵌入式SQL(續(xù))共享變量(主變量)宿主語(yǔ)言與SQL語(yǔ)言之間通過共享變量進(jìn)行數(shù)據(jù)傳送;共享變量由宿主語(yǔ)言程序定義,用SQL的Declare說明后可在SQL語(yǔ)句中引用(引用時(shí)需加':'號(hào),以區(qū)分?jǐn)?shù)據(jù)庫(kù)自身的變量,如:屬性)。嵌入式SQL(續(xù))嵌入式SQL的實(shí)現(xiàn)方法說明部分定義共享變量、環(huán)境變量、游標(biāo)等。ExecSQLBeginDeclareSection;charsno[10],sname[20];intsage;ExecSQLEndDeclareSection;嵌入式SQL(續(xù))執(zhí)行部分:各種SQL語(yǔ)句的執(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編程解決多對(duì)一的問題!說明游標(biāo)語(yǔ)句:ExecSQLDeclare<游標(biāo)名>CursorforSelect…from…Where…;打開游標(biāo)語(yǔ)句:ExecSQLOpen<游標(biāo)名>;推進(jìn)游標(biāo)語(yǔ)句:ExecSQLFetch<游標(biāo)名>into<變量表>;關(guān)閉游標(biāo)語(yǔ)句:ExecSQLClose<游標(biāo)名>;嵌入式SQL(續(xù))建立數(shù)據(jù)庫(kù)連接
ExecSQLConnectTOtarget[ASconnection-name][Useruser-name];
target是要連接的數(shù)據(jù)庫(kù)服務(wù)器:常見的服務(wù)器標(biāo)識(shí)串,如<dbname>@<hostname>:<port>connect-name是可選的連接名,連接必須是一個(gè)有效的標(biāo)識(shí)符在整個(gè)程序內(nèi)只有一個(gè)連接時(shí)可以不指定連接名。嵌入式SQL(續(xù))關(guān)閉數(shù)據(jù)庫(kù)連接
ExecSQLDisconnect[connection];程序運(yùn)行過程中可以修改當(dāng)前連接 ExecSQLSetConnectionconnection-name|DEFAULT;嵌入式SQL(續(xù))[例]依次檢查某個(gè)系的學(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語(yǔ)言主程序開始*/{ int count=0; charyn;/*變量yn代表yes或no*/ printf("Pleasechoosethedepartmentname(CS/MA/IS):"); scanf("%s",deptname);/*為主變量deptname賦值*/ EXECSQLCONNECTTOTEST@localhost:54321USER"SYSTEM"/"MANAGER";/*連接數(shù)據(jù)庫(kù)TEST*/ EXECSQLDECLARESXCURSORFOR/*定義游標(biāo)*/ SELECTSno,Sname,Ssex,Sage/*SX對(duì)應(yīng)語(yǔ)句的執(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)信息決定何時(shí)退出循環(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; }/*對(duì)當(dāng)前游標(biāo)指向的學(xué)生年齡進(jìn)行更新*/}EXECSQLCLOSESX;/*關(guān)閉游標(biāo)SX不再和查詢結(jié)果對(duì)應(yīng)*/ EXECSQLCOMMITWORK;/*提交更新*/ EXECSQLDISCONNECTTEST;/*斷開數(shù)據(jù)庫(kù)連接*/}數(shù)據(jù)庫(kù)編程二、PL/SQL與Transact-SQLPL/SQL與Transact-SQLPL/SQLPL/SQL是Oracle對(duì)標(biāo)準(zhǔn)SQL的過程化擴(kuò)充,它將數(shù)據(jù)庫(kù)技術(shù)和過程化程序設(shè)計(jì)語(yǔ)言聯(lián)系起來,可使用循環(huán)、分支和嵌套,將SQL的數(shù)據(jù)操縱功能與過程化語(yǔ)言數(shù)據(jù)處理功能相結(jié)合。PL/SQL與Transact-SQL(續(xù))PL/SQL的作用能夠使一組SQL語(yǔ)句的功能更具模塊化程序特點(diǎn);采用了過程性語(yǔ)言控制程序的結(jié)構(gòu);可以對(duì)程序中的錯(cuò)誤進(jìn)行自動(dòng)處理,使程序能夠在遇到錯(cuò)誤的時(shí)候不會(huì)被中斷;具有較好的可移植性,可以移植到另一個(gè)Oracle數(shù)據(jù)庫(kù)中;集成在數(shù)據(jù)庫(kù)中,調(diào)用更快;減少了網(wǎng)絡(luò)的交互,有助于提高程序性能。PL/SQL與Transact-SQL(續(xù))PL/SQL程序的基本結(jié)構(gòu)DECLARE—可選部分變量、常量、游標(biāo)、用戶定義異常的聲明……BEGIN—必要部分SQL語(yǔ)句和PL/SQL語(yǔ)句構(gòu)成的執(zhí)行程序……EXCEPTION—可選部分程序出現(xiàn)異常時(shí),捕捉異常并處理異?!璄ND;—必須部分PL/SQL與Transact-SQL(續(xù))PL/SQL的變量簡(jiǎn)單變量格式:變量名[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的語(yǔ)句賦值語(yǔ)句:變量名稱:=表達(dá)式v_sno:='20090080';條件語(yǔ)句:IF-THEN,IF-THEN-ELSE和嵌套的IF語(yǔ)句IF(new.Job=‘講師')AND(new.Sal<3000)THENnew.Sal:=3000;ENDIF;
PL/SQL與Transact-SQL(續(xù))分支語(yǔ)句:Casewhen條件表達(dá)式1then……when條件表達(dá)式nthen……else……Endcase;PL/SQL與Transact-SQL(續(xù))11循環(huán)語(yǔ)句:基本loop循環(huán)Loop語(yǔ)句1;語(yǔ)句2;……exit[when條件];Endloop;PL/SQL與Transact-SQL(續(xù))Forloop循環(huán):For控制變量in[reverse]下限..上限loop語(yǔ)句1;……語(yǔ)句n;Endloop;PL/SQL與Transact-SQL(續(xù))Whileloop循環(huán):While條件loop語(yǔ)句1;……語(yǔ)句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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州護(hù)理職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 2025年湖北職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案一套
- 2025年海南職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)完美版
- 2025年黑龍江省牡丹江市單招職業(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案
- 2025年廣東省汕尾市單招職業(yè)適應(yīng)性測(cè)試題庫(kù)及答案1套
- 2025年河北工業(yè)職業(yè)技術(shù)大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)完整
- 2025年貴州健康職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及答案1套
- 2025年黑龍江農(nóng)墾職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 2025年貴州農(nóng)業(yè)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)新版
- 2025年河南輕工職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)匯編
- 2025人教版一年級(jí)下冊(cè)數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫作指令
- 休學(xué)復(fù)學(xué)申請(qǐng)書
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 新建污水處理廠工程EPC總承包投標(biāo)方案(技術(shù)標(biāo))
- 山東省德州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 本人報(bào)廢車輛委托書
- 雙減政策與五項(xiàng)管理解讀
- 2025年道德與法治小學(xué)六年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 過橋資金操作流程
- 貨物學(xué) 課件1.2貨物的特性
評(píng)論
0/150
提交評(píng)論