版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第八章數(shù)據(jù)庫編程8.1嵌入式SQL8.2存儲過程8.3ODBC編程8.1嵌入式SQL建立數(shù)據(jù)庫后就要開發(fā)應(yīng)用系統(tǒng)了。標(biāo)準(zhǔn)化SQL是非過程化的查詢語言,具有操作統(tǒng)一、面向集合、功能豐富、使用簡單等多項優(yōu)點。但和程序設(shè)計語言相比,高度非過程化的優(yōu)點同時也成了它的缺點:缺少流程控制能力,難以實現(xiàn)業(yè)務(wù)中的邏輯控制,SQL編程技術(shù)可以有效克服這一缺點,提高應(yīng)用系統(tǒng)和RDBMS間互操作性。應(yīng)用系統(tǒng)中使用SQL編程來訪問和管理數(shù)據(jù)庫中數(shù)據(jù)的方式主要有:嵌入式SQL、PL/SQL(存儲過程)、ODBC編程、JDBC編程和OLEDB編程等方式。嵌入式SQL是將SQL語句嵌入程序設(shè)計語言中,被嵌入的程序設(shè)計語言,如C,C++,PB,JAVA,VB等稱謂宿主語言,簡稱主語言。對ESQL,RDBMS一般采用預(yù)編譯方法處理,即由RDBMS的預(yù)處理程序?qū)υ闯绦蜻M行掃描,識別出ESQL語句,把它們轉(zhuǎn)換成語言調(diào)用語句,以使主語言編譯程序能識別它們,然后由主語言的編譯程序?qū)⒓兊闹髡Z言程序編譯成目標(biāo)碼。在ESQL中,為了能夠區(qū)分SQL語句和主語言語句,所有SQL語句都必須加標(biāo)志。但不同主語言所規(guī)定加的標(biāo)志不同。8.1.1嵌入式SQL的處理過程8.1.2嵌入式SQL與主語言的通信數(shù)據(jù)庫工作單元與源程序工作單元之間的通信主要包括:1、向主語言傳遞SQL語句執(zhí)行狀態(tài)信息,使主語言能夠據(jù)此信息控制程序流程,主要用SQL通信區(qū)SQLCommunicationArea(簡稱SQLCA)實現(xiàn);2、主語言向SQL語句提供參數(shù),主要用主變量(HostVariable)實現(xiàn);3、將SQL語句查詢數(shù)據(jù)庫的結(jié)果交給主語言處理,主要用主變量和游標(biāo)(Cursor)實現(xiàn)。一、SQL通信區(qū)SQL語句執(zhí)行后,系統(tǒng)要反饋給主語言若干信息主要包括描述系統(tǒng)當(dāng)前工作狀態(tài)的運行環(huán)境的各種數(shù)據(jù)。這些信息將送到SQLCA中。主語言從SQLCA中取出這些狀態(tài)信息,據(jù)些決定接下來的的流程。SQLCA在應(yīng)用程序中要事先加以定義,一般都是系統(tǒng)級變量。SQLCA中有一個變量SQLCODE用來存放每次執(zhí)行SQL語句后返回的狀態(tài)代碼。主語言每執(zhí)行完一條SQL語句之后都不得應(yīng)該測試一下SQLCODE的值,以了解該SQL語句執(zhí)行情況并做相應(yīng)處理。二、主變量嵌入式SQL語句中可以使用主語言的程序變量來輸入或輸出數(shù)據(jù)。SQL語句中使用的主語言程序變量簡稱為主變量。主變量根據(jù)其作用的不同,分為輸入主變量和輸出主變量。輸入主變量由主語言對其賦值,SQL引用;輸出主變量由SQL語句對其賦值或設(shè)置狀態(tài)信息,返回給主語言。一個主變量可以附帶一個任選的指示變量(IndicatorVariable)。指示變量是一個整型變量,用來“指示”所指主變量的值或條件。指示變量可以指示輸入主變量是否為空值,可以檢測輸出主變量是否是空值,值是否被截斷。所有主變量的指示變量必須在SQL語句{}之間進行說明。說明之后,主變量可以在SQL語句中任何一個能夠使用表達式的地方出現(xiàn),為了與數(shù)據(jù)庫對象名區(qū)別,SQL語句中的主變量名和指示變量前要加“:”作為標(biāo)志。三、游標(biāo)SQL是面向集合的,一條SQL語句可以產(chǎn)生或處理多條記錄。而主語言是面向記錄的,一組變量一次只能存取一條記錄。所以需要用游標(biāo)來協(xié)調(diào)這兩種不同的處理方式。游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果,每個游標(biāo)都有一個名字,用戶可以通過游標(biāo)逐一獲取記錄,并賦給主變量,交由主語言進一步處理。四、建立和關(guān)閉數(shù)據(jù)庫連接嵌入式SQL程序要訪問數(shù)據(jù)庫必須先連接數(shù)據(jù)庫。RDBMS根據(jù)用戶信息對連接請求進行合法性驗證,只有通過身份驗證,才能建立一個合法連接。1、建立數(shù)據(jù)庫連接2、關(guān)閉數(shù)據(jù)庫連接當(dāng)某個連接上的所有數(shù)據(jù)庫操作完成后,應(yīng)用程序應(yīng)該主動釋放所占用的連接資源。五、程序?qū)嵗?,以PB為主語言進行講解8.1.3不用游標(biāo)的SQL語句有的ESQL語句不需要使用游標(biāo),它們是:說明性語句、數(shù)據(jù)定義語句、數(shù)據(jù)控制語句、查詢結(jié)果為單記錄的SELECT語句、非CURRENT形式的增刪語句。一、查詢結(jié)果為單記錄的SELECT語句例:根據(jù)學(xué)生學(xué)號查詢學(xué)生信息,假設(shè)已經(jīng)把要查詢的學(xué)號賦給了主變量givensnoEXECSQLSELECTSNO,SNAME,SSEX,SAGE,SDEPTINTO:HSNO,:HNAME,:HSEX,:HAGE,:HDEPTFROMSTUDENTWHERESNO=:givensno;二、非CURRENT形式的增刪改語句有些增刪語句不需要使用游標(biāo),不是CURRENT形式的,在UPDATE的SET子句和WHERE子句中可以使用主變量,SET子句還可以使用指示變量。EXECSQLUPDATEscSETgrade=:newgradeWHEREsno=:givensno;sageid=-1;EXECSQLUPDATEstudentSETsage=NULLWHEREsdept='CS';EXECSQLDELETEFROMscWHEREsno={SELECTsnoFROMstudentwheresname=:stuname);8.4.1使用游標(biāo)的SQL語句必須使用游標(biāo)的SQL的語句有:查詢結(jié)果為多條記錄的SELECT語句、CURRENT形式的UPDATE和DELETE語句。一、查詢結(jié)果為多條記錄的SELECT語句(1)用DELCARE說明游標(biāo);(2)用OPEN語句打開游標(biāo);(3)用FETCH語句推進游標(biāo),一般用一循環(huán)結(jié)構(gòu);(4)使用完后,用CLOSE關(guān)閉游標(biāo)。游標(biāo)關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系。但關(guān)閉的游標(biāo)可以再次打開使用,方法同上。二、CURRENT形式的UPDATE和DELETE語句UPDATE和DELETE語句都是集合操作,如果只想修改或刪除其中的某個記錄,則需要用帶游標(biāo)的SELECT語句查出所有滿足條件的記錄,從中進一步找出要修改或刪除的記錄,然后用CURRENT形式的UPDATE和DELETE語句操作。即要用子句WHERECURRNETOF<游標(biāo)名>8.1.5動態(tài)SQL動態(tài)SQL方法允許主語言在運行過程中臨時“組裝”SQL語句。動態(tài)SQL支持動態(tài)組裝SQL語句和動態(tài)參數(shù)兩種形式,給開發(fā)者提供設(shè)計任意SQL語句的能力。一、使用SQL語句主變量二、動態(tài)參數(shù)1.聲明SQL語句主變量2.準(zhǔn)備SQL語句(PREPARE)3.執(zhí)行準(zhǔn)備好的語句(EXECUTE)8.2存儲過程SQL99標(biāo)準(zhǔn)中給出了SQL-invokedroutines的概念,它可以分為存儲過程(SQL-invokedprocedure)和函數(shù)(SQL-invokedfunction)兩類。8.2.1PL/SQL的塊結(jié)構(gòu)基本的SQL是高度非過程化的語言。ESQL將SQL語句嵌入程序設(shè)計語言,借助高級語言的控制功能實現(xiàn)過程化。PL/SQL程序的基本結(jié)構(gòu)是塊。所有的PL/SQL程序都是由塊組成的。這些塊之間可以互相嵌套,每個塊完成一個邏輯操作。定義部分{執(zhí)行部分{DECLARE變量、常量、游標(biāo)、異常等/*定義的變量、常量等只能在該基本塊中使用,當(dāng)基本塊執(zhí)行結(jié)束時,定義就不再存在。*/BEGINSQL語句、PL/SQL的流程控制語句EXCEPTION異常處理部分/*在出現(xiàn)異常時,采取相應(yīng)的措施*/END;8.2.2變量和常量的定義1.PL/SQL中定義變量的語法形式是變量名數(shù)據(jù)類型[[NOTNULL]]:=初值表達式或變量名數(shù)據(jù)類型[[NOTNULL]初值表達式]2.常量的定義類似于變量的定義常量名數(shù)據(jù)類型CONSTANT:=常量表達式常量必須要給一個值,并且該值在存在期間或常量的作用哉內(nèi)不能改變。3.賦值語句變量名稱:=表達式8.2.3控制語句PL/SQL提供了流程控制語句,使用時要參考具體的產(chǎn)品手冊的語法規(guī)則一、條件控制語句1.IF<條件表達式>THEN{語句序列}ENDIF2.IF<條件表達式>THEN{語句序列1}ELSE{語句序列2}ENDIF3.在THEN和ELSE子句中還可以嵌套使用IF語句。二、循環(huán)控制語句1、最簡單的循環(huán)語句LOOPLOOP{循環(huán)體,一組PL/SQL語句}ENDLOOP;多數(shù)RDBMS的PL/SQL都提供了EXIT、BREAK等循環(huán)結(jié)束語句,以保證LOOP語句能夠在適當(dāng)?shù)臈l件下結(jié)束。2、WHILE-LOOPWHILE<條件> LOOP{語句序列}ENDLOOP;3、FOR-LOOPFOR計數(shù)器IN[步長]下界…上界LOOP{語句序列}ENDLOOP三、錯誤處理如果PL/SQL在執(zhí)行時出現(xiàn)異常,則應(yīng)該讓程序在產(chǎn)生異常的語句處停下來,根據(jù)異常的類型去執(zhí)行異常處理。使用時要根據(jù)具體DBMS系統(tǒng)來進行處理。8.2.4存儲過程存儲過程和函數(shù)是命名塊,它們被編譯后保存在數(shù)據(jù)庫中,可以被反復(fù)調(diào)用,運行速度快。一、存儲過程的優(yōu)點1、由于存儲過程不像解釋執(zhí)行的SQL語句那樣在提出操作請求時才進行語法分析和優(yōu)化工作,因而運行效率高,它提供了在服務(wù)器端快速執(zhí)行SQL語句的有效途徑。2、存儲過程降低了客戶機和服務(wù)器之間的通信量。客戶機上的應(yīng)用程序只要通過網(wǎng)絡(luò)向服務(wù)器發(fā)出存儲過程的名字的參數(shù),就可以讓RDBMS執(zhí)行許多條SQL語句,并執(zhí)行數(shù)據(jù)處理,只有最終處理結(jié)果才返回客戶端。3、方便實施企業(yè)規(guī)則??梢园哑髽I(yè)規(guī)則的運算程序?qū)懗纱鎯^程放入數(shù)據(jù)庫服務(wù)器中,由RDBMS管理,既有利于集中控制,又能方便地進行維護。當(dāng)用戶規(guī)則發(fā)生變化時只要修改存儲過程,無須修改其他應(yīng)用程序。二、存儲過程的用戶接口1、創(chuàng)建存儲過程
CREATEProcedure<過程名>([參數(shù)1,參數(shù)2,…])AS<{語句序列}>2、執(zhí)行存儲過程
CALL/PERFORMProcedure<過程名>([參數(shù)1,參數(shù)2,…])3、刪除存儲過程DROPProcedure<過程名>三、游標(biāo)和嵌入式SQL一樣,在PL/SQL中如果SELECT語句只返回一條記錄,可以將該結(jié)果存放到變量中。當(dāng)查詢返回多條記錄時,就要使用游標(biāo)對結(jié)果集進行處理。一個游標(biāo)與一個SQL語句相關(guān)聯(lián)。8.3ODBC編程8.3.1數(shù)據(jù)庫互連概述提出和產(chǎn)生ODBC的原因是不同的數(shù)據(jù)庫管理系統(tǒng)的存在。目前廣泛使用的RDBMS有多種,盡管這些系統(tǒng)都是關(guān)系數(shù)據(jù)庫,也都遵循SQL標(biāo)準(zhǔn),但不同的系統(tǒng)有許多差異。因此,在某個RDBMS下編寫的應(yīng)用程序就不能在另一個RDBMS下運行,適應(yīng)性和可移植性較差。更加重要的是,許多應(yīng)用程序需要共享多個部門的數(shù)據(jù)資源,訪問不同的RDBMS。為此,用戶需要有連接不同RDBMS的方法和技術(shù),使數(shù)據(jù)庫系統(tǒng)“開放”,能夠“數(shù)據(jù)庫互連”。ODBC是微軟公司開放服務(wù)體系(WindowsOpenServicesArchitecture,WOSA)中有關(guān)數(shù)據(jù)庫的一個組成部分,它建立了一組規(guī)范,并提供一組訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)API。作為規(guī)范它具有兩重功效:規(guī)范應(yīng)用開發(fā);規(guī)范RDBMS應(yīng)用接口。8.3.2ODBC工作原理概述ODBC開發(fā)應(yīng)用系統(tǒng)的體系結(jié)構(gòu),由四部分組成:一、應(yīng)用程序應(yīng)用程序提供用戶界面、應(yīng)用邏輯和事務(wù)邏輯。使用開發(fā)數(shù)據(jù)庫應(yīng)用程序時,應(yīng)用程序調(diào)用的是標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語句。應(yīng)用層使用ODBCAPI調(diào)用接口與數(shù)據(jù)庫進行交互。ODBC應(yīng)用程序包括的內(nèi)容有:請求連接數(shù)據(jù)庫;向數(shù)據(jù)源發(fā)送SQL語句;為SQL語句執(zhí)行結(jié)果分配存儲空間定義所讀取的數(shù)據(jù)格式;獲取數(shù)據(jù)庫操作結(jié)果或處理錯誤;進行數(shù)據(jù)處理并向用戶提交處理結(jié)果;請求事務(wù)的提交和回滾操作;斷開與數(shù)據(jù)源的連接。二、驅(qū)動程序管理器驅(qū)動程序管理是用來管理各種驅(qū)動程序的。驅(qū)動程序管理器是由微軟公司提供,它包含在ODBC32.DLL中,對用戶是透明的。它管理應(yīng)用程序和驅(qū)動程序之間的通信。驅(qū)動程序管理可以建立、配置或刪除數(shù)據(jù)源,并查看系統(tǒng)當(dāng)前所安裝的數(shù)據(jù)庫ODBC驅(qū)動程序。三、數(shù)據(jù)庫驅(qū)動程序ODBC通過驅(qū)動程序來提供應(yīng)用系統(tǒng)與數(shù)據(jù)庫平臺的獨立性。ODBC應(yīng)用程序不能直接存取數(shù)據(jù)庫,其各種操作請求由驅(qū)動程序管理器提交給某個RDBMS的ODBC驅(qū)動程序,通過調(diào)用驅(qū)動程序支持的函數(shù)來存取數(shù)據(jù)庫。數(shù)據(jù)庫的操作結(jié)果也通過驅(qū)動程序返回給應(yīng)用程序。四、ODBC數(shù)據(jù)源管理數(shù)據(jù)源是最終用戶需要訪問的數(shù)據(jù),包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實際上是一種數(shù)據(jù)連接的抽象。ODBC給每個被訪問的數(shù)據(jù)源指定唯一的數(shù)據(jù)源名(DataSourceName,DSN)。在連接中,用數(shù)據(jù)源名來代表用戶名、服務(wù)器名、所連接的數(shù)據(jù)庫名等。最終用戶無需知道DBMS或其他數(shù)據(jù)庫管理軟件
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)年級組長個人工作計劃
- 大班下學(xué)期社會教案《戶外活動計劃及總結(jié)》
- 計劃生育家庭獎勵扶助年終總結(jié)
- 化工企業(yè)2025年上半年工作總結(jié)及下半年年工作計劃
- 員工年度工作總結(jié)及明年工作計劃的內(nèi)容
- 婦幼醫(yī)院某年年度工作計劃
- 學(xué)校2025年消防安全工作計劃
- 《大學(xué)英語聽力應(yīng)用教程(第1冊)》課件-Unit 2 Private Schools
- 工會勞動合同法題目
- 《ERP的成本管理》課件
- GB/T 2820.5-2009往復(fù)式內(nèi)燃機驅(qū)動的交流發(fā)電機組第5部分:發(fā)電機組
- 健康素養(yǎng)科普健康知識講座-課件
- 電廠化學(xué)系統(tǒng)簡介課件
- 擋土墻計算實例
- 《無機化學(xué)》第七章分子結(jié)構(gòu)和晶體結(jié)構(gòu)
- 醫(yī)療耗材配送服務(wù)方案
- 動物生物技術(shù)(課件)
- EPC總承包項目設(shè)計的總體安排與資源配置方案
- 浙江省溫州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 甲醇鈉車間操作規(guī)范流程(堿法)
- 建材行業(yè)重大安全事故隱患檢查表(根據(jù)2022版工貿(mào)行業(yè)重大生產(chǎn)安全事故隱患判定標(biāo)準(zhǔn)編制)
評論
0/150
提交評論