




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 數(shù)據(jù)庫編程嵌入式SQL存放過程ODBC編程第1頁8.1 嵌入式SQLSQL語言提供了兩種不一樣使用方式:交互式嵌入式為何要引入嵌入式SQLSQL語言是非過程性語言事務(wù)處理應(yīng)用需要高級語言這兩種方式細(xì)節(jié)上有差異,在程序設(shè)計(jì)環(huán)境下,SQL語句要做一些必要擴(kuò)充第2頁8.1.1 嵌入式SQL處理過程主語言嵌入式SQL是將SQL語句嵌入程序設(shè)計(jì)語言中,被嵌入程序設(shè)計(jì)語言,如C、C+、Java,稱為宿主語言,簡稱主語言。處理過程預(yù)編譯方法第3頁主語言程序 含ESQL語句RDBMS預(yù)處理程序ESQL語句轉(zhuǎn)換為函數(shù)調(diào)用主語言編譯程序目口號言程序ESQL基本處理過程8.1.1 嵌入式SQL處理過程第4頁
2、為了區(qū)分SQL語句與主語言語句, 全部SQL語句必須加前綴EXEC SQL,以(;)結(jié)束: EXEC SQL ;8.1.1 嵌入式SQL處理過程第5頁8.1.2 嵌入式SQL語句與主語言之間通信將SQL嵌入到高級語言中混合編程,程序中會(huì)含有兩種不一樣計(jì)算模型語句SQL語句描述性面向集合語句負(fù)責(zé)操縱數(shù)據(jù)庫高級語言語句過程性面向統(tǒng)計(jì)語句負(fù)責(zé)控制程序流程它們之間應(yīng)該怎樣通信?第6頁數(shù)據(jù)庫工作單元與源程序工作單元之間通信:1. SQL通信區(qū)向主語言傳遞SQL語句執(zhí)行狀態(tài)信息使主語言能夠據(jù)此控制程序流程2. 主變量主語言向SQL語句提供參數(shù)將SQL語句查詢數(shù)據(jù)庫結(jié)果交主語言深入處理3. 游標(biāo)處理集合性操
3、作語言與過程性操作語言不匹配8.1.2 嵌入式SQL語句與主語言之間通信第7頁一、SQL通信區(qū)8.1.2 嵌入式SQL語句與主語言之間通信SQLCA: SQL Communication AreaSQLCA是一個(gè)數(shù)據(jù)結(jié)構(gòu)SQLCA用途SQL語句執(zhí)行后,RDBMS反饋給應(yīng)用程序信息描述系統(tǒng)當(dāng)前工作狀態(tài)描述運(yùn)行環(huán)境這些信息將送到SQL通信區(qū)SQLCA中應(yīng)用程序從SQLCA中取出這些狀態(tài)信息,據(jù)此決定接下來執(zhí)行語句第8頁SQLCA使用方法:定義SQLCA用EXEC SQL INCLUDE SQLCA定義使用SQLCASQLCA中有一個(gè)存放每次執(zhí)行SQL語句后返回代碼變量SQLCODE假如SQLCOD
4、E等于預(yù)定義常量SUCCESS,則表示SQL語句成功,不然表示犯錯(cuò)應(yīng)用程序每執(zhí)行完一條SQL 語句之后都應(yīng)該測試一下SQLCODE值,以了解該SQL語句執(zhí)行情況并做對應(yīng)處理8.1.2 嵌入式SQL語句與主語言之間通信第9頁二、主變量 8.1.2 嵌入式SQL語句與主語言之間通信主變量嵌入式SQL語句中能夠使用主語言程序變量來輸入或輸出數(shù)據(jù)在SQL語句中使用主語言程序變量簡稱為主變量(Host Variable)第10頁主變量類型輸入主變量輸出主變量一個(gè)主變量有可能既是輸入主變量又是輸出主變量8.1.2 嵌入式SQL語句與主語言之間通信第11頁指示變量:一個(gè)主變量能夠附帶一個(gè)指示變量(Indic
5、ator Variable)什么是指示變量指示變量用途8.1.2 嵌入式SQL語句與主語言之間通信第12頁在SQL語句中使用主變量和指示變量方法1) 說明主變量和指示變量BEGIN DECLARE SECTION. . (說明主變量和指示變量).END DECLARE SECTION8.1.2 嵌入式SQL語句與主語言之間通信第13頁2) 使用主變量說明之后主變量能夠在SQL語句中任何一個(gè)能夠使用表示式地方出現(xiàn)為了與數(shù)據(jù)庫對象名(表名、視圖名、列名等)區(qū)分,SQL語句中主變量名前要加冒號(:)作為標(biāo)志3) 使用指示變量 指示變量前也必須加冒號標(biāo)志 必須緊跟在所指主變量之后8.1.2 嵌入式SQ
6、L語句與主語言之間通信第14頁三、游標(biāo)(cursor)8.1.2 嵌入式SQL語句與主語言之間通信為何要使用游標(biāo)SQL語言與主語言含有不一樣數(shù)據(jù)處理方式SQL語言是面向集合,一條SQL語句標(biāo)準(zhǔn)上能夠產(chǎn)生或處理多條統(tǒng)計(jì)主語言是面向統(tǒng)計(jì),一組主變量一次只能存放一條統(tǒng)計(jì)僅使用主變量并不能完全滿足SQL語句向應(yīng)用程序輸出數(shù)據(jù)要求嵌入式SQL引入了游標(biāo)概念,用來協(xié)調(diào)這兩種不一樣處理方式第15頁游標(biāo)游標(biāo)是系統(tǒng)為用戶開設(shè)一個(gè)數(shù)據(jù)緩沖區(qū),存放SQL語句執(zhí)行結(jié)果每個(gè)游標(biāo)區(qū)都有一個(gè)名字用戶能夠用SQL語句逐一從游標(biāo)中獲取統(tǒng)計(jì),并賦給主變量,交由主語言深入處理8.1.2 嵌入式SQL語句與主語言之間通信第16頁四、
7、建立和關(guān)閉數(shù)據(jù)庫連接8.1.2 嵌入式SQL語句與主語言之間通信建立數(shù)據(jù)庫連接 EXEC SQL CONNECT TO target AS connection-name USER user-name; target是要連接數(shù)據(jù)庫服務(wù)器:常見服務(wù)器標(biāo)識串,如: 包含服務(wù)器標(biāo)識SQL串常量 DEFAULT connect-name是可選連接名,連接必須是一個(gè)有效標(biāo)識符,在整個(gè)程序內(nèi)只有一個(gè)連接時(shí)能夠不指定連接名關(guān)閉數(shù)據(jù)庫連接 EXEC SQL DISCONNECT connection;程序運(yùn)行過程中能夠修改當(dāng)前連接 :EXEC SQL SET CONNECTION connection-nam
8、e | DEFAULT;第17頁五、程序?qū)嵗?依次檢驗(yàn)?zāi)硞€(gè)系學(xué)生統(tǒng)計(jì),交互式更新一些學(xué)生年紀(jì)。EXEC SQL BEGIN DECLARE SECTION; /*主變量說明開始*/ char deptname64;char HSno64;char HSname64; char HSsex64;int HSage;intNEWAGE;EXEC SQL END DECLARE SECTION; /*主變量說明結(jié)束*/long SQLCODE;EXEC SQL INCLUDE sqlca; /*定義SQL通信區(qū)*/8.1.2 嵌入式SQL語句與主語言之間通信第18頁int main(void) /
9、*C語言主程序開始*/int count = 0;char yn; /*變量yn代表yes或no*/printf(Please choose the department name(CS/MA/IS): ); scanf(%s, deptname); /*為主變量deptname賦值*/EXEC SQL CONNECT TO TESTlocalhost:54321 USER SYSTEM /MANAGER; /*連接數(shù)據(jù)庫TEST*/EXEC SQL DECLARE SX CURSOR FOR /*定義游標(biāo)*/SELECT Sno, Sname, Ssex, Sage /*SX對應(yīng)語句執(zhí)行結(jié)果
10、*/FROM StudentWHERE SDept = :deptname;EXEC SQL OPEN SX; /*打開游標(biāo)SX便指向查詢結(jié)果第一行*/8.1.2 嵌入式SQL語句與主語言之間通信第19頁for ( ; ; ) /*用循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中統(tǒng)計(jì)*/ EXEC SQL FETCH SX INTO :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
11、) /*假如是第一行話,先打出行頭*/ printf(n%-10s %-20s %-10s %-10sn, Sno, Sname, Ssex, Sage); printf(%-10s %-20s %-10s %-10dn, HSno, HSname, HSsex, HSage); /*打印查詢結(jié)果*/ printf(UPDATE AGE(y/n)?); /*問詢用戶是否要更新該學(xué)生年紀(jì)*/ do scanf(%c,&yn); while(yn != N & yn != n & yn != Y & yn != y);8.1.2 嵌入式SQL語句與主語言之間通信第20頁if (yn = y | y
12、n = Y) /*假如選擇更新操作*/ printf(INPUT NEW AGE:); scanf(%d,&NEWAGE); /*用戶輸入新年紀(jì)到主變量中*/ EXEC SQL UPDATE Student /*嵌入式SQL*/SET Sage = :NEWAGEWHERE CURRENT OF SX ; /*對當(dāng)前游標(biāo)指向?qū)W生年紀(jì)進(jìn)行更新*/ EXEC SQL CLOSE SX; /*關(guān)閉游標(biāo)SX不再和查詢結(jié)果對應(yīng)*/EXEC SQL COMMIT WORK; /*提交更新*/EXEC SQL DISCONNECT TEST; /*斷開數(shù)據(jù)庫連接*/8.1.2 嵌入式SQL語句與主語言之間通
13、信第21頁8.1.3 不用游標(biāo)SQL語句不用游標(biāo)SQL語句種類 說明性語句 數(shù)據(jù)定義語句 數(shù)據(jù)控制語句 查詢結(jié)果為單統(tǒng)計(jì)SELECT語句 非CURRENT形式增刪改語句 第22頁一、查詢結(jié)果為單統(tǒng)計(jì)SELECT語句8.1.3 不用游標(biāo)SQL語句這類語句不需要使用游標(biāo),只需要用INTO子句指定存放查詢結(jié)果主變量 例2 依據(jù)學(xué)生號碼查詢學(xué)生信息。假設(shè)已經(jīng)把要查詢學(xué)生學(xué)號賦給了主變量givensno。EXEC SQL SELECT Sno,Sname,Ssex,Sage,Sdept INTO :Hsno, : Hname ,:Hsex,:Hage,:Hdept FROM Student WHERE
14、Sno=:givensno;第23頁(1) INTO子句、WHERE子句和HAVING短語條件表示式中均能夠使用主變量(2)查詢返回統(tǒng)計(jì)中,可能一些列為空值NULL。(3) 假如查詢結(jié)果實(shí)際上并不是單條統(tǒng)計(jì),而是多條統(tǒng)計(jì),則程序犯錯(cuò),RDBMS會(huì)在SQLCA中返回錯(cuò)誤信息 8.1.3 不用游標(biāo)SQL語句第24頁例3 查詢某個(gè)學(xué)生選修某門課程成績。假設(shè)已經(jīng)把將要查詢學(xué)生學(xué)號賦給了主變量givensno,將課程號賦給了主變量givencno。 EXEC SQL SELECT Sno,Cno,Grade INTO :Hsno,:Hcno,:Hgrade:Gradeid /*指示變量Gradeid*/
15、 FROM SC WHERE Sno=:givensno AND Cno=:givencno;假如Gradeid 0,不論Hgrade為何值,均認(rèn)為該學(xué)生成績?yōu)榭罩怠?.1.3 不用游標(biāo)SQL語句第25頁二、非CURRENT形式增刪改語句8.1.3 不用游標(biāo)SQL語句在UPDATESET子句和WHERE子句中能夠使用主變量,SET子句還能夠使用指示變量 例4 修改某個(gè)學(xué)生選修1號課程成績。EXEC SQL UPDATE SC SET Grade=:newgrade /*修改成績已賦給主變量*/ WHERE Sno=:givensno; /*學(xué)號賦給主變量givensno*/ 第26頁例5 將計(jì)
16、算機(jī)系全體學(xué)生年紀(jì)置NULL值。 Sageid=-1; EXEC SQL UPDATE Student SET Sage=:Raise :Sageid WHERE Sdept= CS ; 將指示變量Sageid賦一個(gè)負(fù)值后,不論主變量Raise為何值,RDBMS都會(huì)將CS系全部學(xué)生年紀(jì)置空值 。等價(jià)于: EXEC SQL UPDATE Student SET Sage=NULL WHERE Sdept= CS;8.1.3 不用游標(biāo)SQL語句第27頁例6 某個(gè)學(xué)生退學(xué)了,現(xiàn)要將相關(guān)他全部選課統(tǒng)計(jì)刪除掉。假設(shè)該學(xué)生姓名已賦給主變量stdname。 EXEC SQL DELETE FROM SC W
17、HERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname); 8.1.3 不用游標(biāo)SQL語句第28頁例7 某個(gè)學(xué)生新選修了某門課程,將相關(guān)統(tǒng)計(jì)插入SC表中。假設(shè)插入學(xué)號已賦給主變量stdno,課程號已賦給主變量couno。 gradeid=-1; /*用作指示變量,賦為負(fù)值*/EXEC SQL INSERT INTO SC(Sno,Cno,Grade) VALUES(:stdno,:couno,:gr :gradeid); 因?yàn)樵搶W(xué)生剛選修課程,成績應(yīng)為空,所以要把指示變量賦為負(fù)值 8.1.3 不用游標(biāo)SQL語句第29頁8.1.4 使用游標(biāo)
18、SQL語句必須使用游標(biāo)SQL語句查詢結(jié)果為多條統(tǒng)計(jì)SELECT語句CURRENT形式UPDATE語句CURRENT形式DELETE語句第30頁一、 查詢結(jié)果為多條統(tǒng)計(jì)SELECT語句8.1.4 使用游標(biāo)SQL語句使用游標(biāo)步驟1. 說明游標(biāo)2. 打開游標(biāo)3.推進(jìn)游標(biāo)指針并取當(dāng)前統(tǒng)計(jì) 4. 關(guān)閉游標(biāo)第31頁1. 說明游標(biāo)8.1.4 使用游標(biāo)SQL語句使用DECLARE語句語句格式EXEC SQL DECLARE CURSOR FOR ;功效是一條說明性語句,這時(shí)DBMS并不執(zhí)行SELECT指定查詢操作。第32頁使用OPEN語句語句格式 EXEC SQL OPEN ;功效打開游標(biāo)實(shí)際上是執(zhí)行對應(yīng)SE
19、LECT語句,把全部滿足查詢條件統(tǒng)計(jì)從指定表取到緩沖區(qū)中這時(shí)游標(biāo)處于活動(dòng)狀態(tài),指針指向查詢結(jié)果集中第一條統(tǒng)計(jì)8.1.4 使用游標(biāo)SQL語句第33頁3.推進(jìn)游標(biāo)指針并取當(dāng)前統(tǒng)計(jì) 使用FETCH語句語句格式 EXEC SQL FETCH INTO ,.;8.1.4 使用游標(biāo)SQL語句功能指定方向推進(jìn)游標(biāo)指針,然后將緩沖區(qū)中當(dāng)前記錄用出來送至主變量供主語言深入處理第34頁4. 關(guān)閉游標(biāo)使用CLOSE語句語句格式 EXEC SQL CLOSE ;功效關(guān)閉游標(biāo),釋放結(jié)果集占用緩沖區(qū)及其它資源說明游標(biāo)被關(guān)閉后,就不再和原來查詢結(jié)果集相聯(lián)絡(luò)被關(guān)閉游標(biāo)能夠再次被打開,與新查詢結(jié)果相聯(lián)絡(luò)8.1.4 使用游標(biāo)SQ
20、L語句第35頁二、CURRENT形式UPDATE語句和DELETE語句CURRENT形式UPDATE語句和DELETE語句用途 面向集合操作 一次修改或刪除全部滿足條件統(tǒng)計(jì)8.1.4 使用游標(biāo)SQL語句第36頁假如只想修改或刪除其中某個(gè)統(tǒng)計(jì)用帶游標(biāo)SELECT語句查出全部滿足條件統(tǒng)計(jì)從中深入找出要修改或刪除統(tǒng)計(jì)用CURRENT形式UPDATE語句和DELETE語句修改或刪除之UPDATE語句和DELETE語句中子句: WHERE CURRENT OF 表示修改或刪除是最近一次取出統(tǒng)計(jì),即游標(biāo)指針指向統(tǒng)計(jì) 8.1.4 使用游標(biāo)SQL語句第37頁不能使用CURRENT形式UPDATE語句和DELE
21、TE語句 :當(dāng)游標(biāo)定義中SELECT語句帶有UNION或ORDER BY子句 該SELECT語句相當(dāng)于定義了一個(gè)不可更新視圖 8.1.4 使用游標(biāo)SQL語句第38頁 8.1.5 動(dòng)態(tài)SQL靜態(tài)嵌入式SQL靜態(tài)嵌入式SQL語句能夠滿足普通要求 無法滿足要到執(zhí)行時(shí)才能夠確定要提交SQL語句 動(dòng)態(tài)嵌入式SQL允許在程序運(yùn)行過程中暫時(shí)“組裝”SQL語句支持動(dòng)態(tài)組裝SQL語句和動(dòng)態(tài)參數(shù)兩種形式 第39頁一、使用SQL語句主變量SQL語句主變量:程序主變量包含內(nèi)容是SQL語句內(nèi)容,而不是原來保留數(shù)據(jù)輸入或輸出變量SQL語句主變量在程序執(zhí)行期間能夠設(shè)定不一樣SQL語句,然后馬上執(zhí)行 8.1.5 動(dòng)態(tài)SQL第
22、40頁例9 創(chuàng)建基本表TESTEXEC SQL BEGIN DECLARE SECTION;const char *stmt = CREATE TABLE test(a int); /* SQL語句主變量 */EXEC SQL END DECLARE SECTION;. .EXEC SQL EXECUTE IMMEDIATE :stmt; /* 執(zhí)行語句 */ 8.1.5 動(dòng)態(tài)SQL第41頁二、動(dòng)態(tài)參數(shù)動(dòng)態(tài)參數(shù)SQL語句中可變元素使用參數(shù)符號(?)表示該位置數(shù)據(jù)在運(yùn)行時(shí)設(shè)定和主變量區(qū)分動(dòng)態(tài)參數(shù)輸入不是編譯時(shí)完成綁定而是經(jīng)過 (prepare)語句準(zhǔn)備主變量和執(zhí)行(execute)時(shí)綁定數(shù)據(jù)或主
23、變量來完成 8.1.5 動(dòng)態(tài)SQL第42頁使用動(dòng)態(tài)參數(shù)步驟:1.申明SQL語句主變量。2.準(zhǔn)備SQL語句(PREPARE)。 EXEC SQL PREPARE FROM ; 3.執(zhí)行準(zhǔn)備好語句(EXECUTE)EXEC SQL EXECUTE INTO USING ; 8.1.5 動(dòng)態(tài)SQL第43頁例10向TEST中插入元組。EXEC SQL BEGIN DECLARE SECTION;const char *stmt = INSERT INTO test VALUES(?); /*申明SQL主變量 */EXEC SQL END DECLARE SECTION;. .EXEC SQL PREP
24、ARE mystmt FROM :stmt; /* 準(zhǔn)備語句 */. .EXEC SQL EXECUTE mystmt USING 100; /* 執(zhí)行語句 */EXEC SQL EXECUTE mystmt USING 200; /* 執(zhí)行語句 */ 8.1.5 動(dòng)態(tài)SQL第44頁8.2 存放過程PL/SQL塊結(jié)構(gòu)變量常量定義控制結(jié)構(gòu)存放過程小結(jié)第45頁8.2.1 PL/SQL塊結(jié)構(gòu)PL/SQL :SQL擴(kuò)展 增加了過程化語句功效 基本結(jié)構(gòu)是塊塊之間能夠相互嵌套 每個(gè)塊完成一個(gè)邏輯操作 第46頁P(yáng)L/SOL塊基本結(jié)構(gòu): 1.定義部分 DECLARE -變量、常量、游標(biāo)、異常等 定義變量、常量
25、等只能在該基本塊中使用當(dāng)基本塊執(zhí)行結(jié)束時(shí),定義就不再存在8.2.1 PL/SQL塊結(jié)構(gòu)第47頁2.執(zhí)行部分 BEGIN -SQL語句、PL/SQL流程控制語句 EXCEPTION -異常處理部分 END;8.2.1 PL/SQL塊結(jié)構(gòu)第48頁8.2.2 變量常量定義1. PL/SQL中定義變量語法形式是: 變量名 數(shù)據(jù)類型 NOT NULL:=初值表示式或 變量名 數(shù)據(jù)類型 NOT NULL初值表示式2. 常量定義類似于變量定義: 常量名 數(shù)據(jù)類型 CONSTANT :=常量表示式 常量必須要給一個(gè)值,而且該值在存在期間或常量作用域內(nèi)不能改變。假如試圖修改它,PL/SQL將返回一個(gè)異常。3.
26、賦值語句 變量名稱:=表示式第49頁8.2.3 控制結(jié)構(gòu) PL/SQL 功效:一、條件控制語句二、循環(huán)控制語句 三、錯(cuò)誤處理 第50頁一、 條件控制語句 IF-THEN, IF-THEN-ELSE和嵌套IF語句 1. IF condition THEN Sequence_of_statements; END IF 2. IF condition THEN Sequence_of_statements1; ELSE Sequence_of_statements2; END IF;3. 在THEN和ELSE子句中還能夠再包含IF語句,即IF語句能夠嵌套 8.2.3 控制結(jié)構(gòu) 第51頁二、循環(huán)控制語
27、句 LOOP, WHILE-LOOP和FOR-LOOP 1.最簡單循環(huán)語句LOOP LOOP Sequence_of_statements; END LOOP; 多數(shù)數(shù)據(jù)庫服務(wù)器PL/SQL都提供EXIT、BREAK或LEAVE等循環(huán)結(jié)束語句,確保LOOP語句塊能夠結(jié)束。8.2.3 控制結(jié)構(gòu) 第52頁2. WHILE-LOOP WHILE condition LOOP Sequence_of_statements;END LOOP;每次執(zhí)行循環(huán)體語句之前,首先對條件進(jìn)行求值假如條件為真,則執(zhí)行循環(huán)體內(nèi)語句序列。假如條件為假,則跳過循環(huán)并把控制傳遞給下一個(gè)語句 3. FOR-LOOP FOR c
28、ount IN REVERSEbound1 bound2 LOOP Sequence_of_statements;END LOOP;8.2.3 控制結(jié)構(gòu) 第53頁三、錯(cuò)誤處理:假如PL/SQL在執(zhí)行時(shí)出現(xiàn)異常,則應(yīng)該讓程序在產(chǎn)生異常語句處停下來,依據(jù)異常類型去執(zhí)行異常處理語句 SQL標(biāo)準(zhǔn)對數(shù)據(jù)庫服務(wù)器提供什么樣異常處理做出了提議,要求PL/SQL管理器提供完善異常處理機(jī)制 8.2.3 控制結(jié)構(gòu) 第54頁8.2.4 存放過程PL/SQL塊類型:命名塊:編譯后保留在數(shù)據(jù)庫中,能夠被重復(fù)調(diào)用,運(yùn)行速度較快。存放過程和函數(shù)是命名塊 匿名塊:每次執(zhí)行時(shí)都要進(jìn)行編譯,它不能被存放到數(shù)據(jù)庫中,也不能在其它P
29、L/SQL塊中調(diào)用 第55頁存放過程:由PL/SQL語句書寫過程,經(jīng)編譯和優(yōu)化后存放在數(shù)據(jù)庫服務(wù)器中,使用時(shí)只要調(diào)用即可。 一、存放過程優(yōu)點(diǎn):1. 運(yùn)行效率高2. 降低了客戶機(jī)和服務(wù)器之間通信量 3. 方便實(shí)施企業(yè)規(guī)則8.2.4 存放過程第56頁二、 存放過程用戶接口:1. 創(chuàng)建存放過程 2. 執(zhí)行存放過程 3. 刪除存放過程 8.2.4 存放過程第57頁1. 創(chuàng)建存放過程:CREATE Procedure 過程名(參數(shù)1,參數(shù)2,.) AS;過程名:數(shù)據(jù)庫服務(wù)器正當(dāng)對象標(biāo)識參數(shù)列表:用名字來標(biāo)識調(diào)用時(shí)給出參數(shù)值,必須指定值數(shù)據(jù)類型。參數(shù)也能夠定義輸入?yún)?shù)、輸出參數(shù)或輸入/輸出參數(shù)。默認(rèn)為輸入
30、參數(shù)。過程體:是一個(gè)。包含申明部分和可執(zhí)行語句部分 8.2.4 存放過程第58頁例11 利用存放過程來實(shí)現(xiàn)下面應(yīng)用: 從一個(gè)賬戶轉(zhuǎn)指定數(shù)額款項(xiàng)到另一個(gè)賬戶中。 CREATE PROCEDURE TRANSFER(inAccount INT, outAccount INT, amount FLOAT) AS DECLARE totalDeposit FLOAT; BEGIN /* 檢驗(yàn)轉(zhuǎn)出賬戶余額 */ SELECT total INTO totalDeposit FROM ACCOUNT WHERE ACCOUNTNUM=outAccount; IF totalDeposit IS NULL
31、THEN /* 賬戶不存在或賬戶中沒有存款 */ ROLLBACK; RETURN; END IF; 8.2.4 存放過程第59頁 IF totalDeposit amount THEN /* 賬戶賬戶存款不足 */ ROLLBACK; RETURN;END IF; UPDATE account SET total=total-amount WHERE ACCOUNTNUM=outAccount; /* 修改轉(zhuǎn)出賬戶,減去轉(zhuǎn)出額 */ UPDATE account SET total=total + amount WHERE ACCOUNTNUM=inAccount; /* 修改轉(zhuǎn)入賬戶,增加
32、轉(zhuǎn)出額 */COMMIT; /* 提交轉(zhuǎn)賬事務(wù) */END;8.2.4 存放過程第60頁2. 執(zhí)行存放過程: CALL/PERFORM Procedure 過程名(參數(shù)1,參數(shù)2,.);使用CALL或者PERFORM等方式激活存放過程執(zhí)行。在PL/SQL中,數(shù)據(jù)庫服務(wù)器支持在過程體中調(diào)用其它存放過程例11 從賬戶01003815868轉(zhuǎn)一萬元到01003813828賬戶中。 CALL Procedure TRANSFER(01003813828,01003815868,10000); 8.2.4 存放過程第61頁3. 刪除存放過程 DROP PROCEDURE 過程名();8.2.4 存放過程
33、第62頁CREATE OR REPLACE PROCEDURE RAISE_SALARY1(emp_id INTEGER,INCREASE REAL)IS CURRENT_SALARY REAL;BEGIN SELECT SAL INTO CURRENT_SALARY FROM EMP WHERE empno =emp_id; UPDATE EMP SET SAL=SAL+INCREASE WHERE empno=emp_id;EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(emp_id |無此編號);END;8.2.4 存放過程第63頁三、游 標(biāo) 在PL/SQL中,假如SELECT語句只返回一條統(tǒng)計(jì),能夠?qū)⒃摻Y(jié)果存放到變量中。當(dāng)查詢返回多條統(tǒng)計(jì)時(shí),就要使用游標(biāo)對結(jié)果集進(jìn)行處理一個(gè)游標(biāo)與一個(gè)SQL語句相關(guān)聯(lián)。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 燈具行業(yè)的新材料創(chuàng)新應(yīng)用考核試卷
- 畜牧飼料成分與營養(yǎng)價(jià)值分析考核試卷
- 海洋生物多樣性基因組學(xué)研究考核試卷
- 拍賣行業(yè)商業(yè)模式創(chuàng)新趨勢考核試卷
- 灌溉技術(shù)對灌溉作物生長環(huán)境的影響考核試卷
- 廣播發(fā)射機(jī)用rf信號發(fā)射器考核試卷
- 生物質(zhì)能源在制藥工業(yè)的替代研究考核試卷
- 河北省定州名校2025屆高三年級下學(xué)期四調(diào)考試數(shù)學(xué)試題
- 玉石資源保護(hù)與可持續(xù)發(fā)展考核試卷
- 企業(yè)價(jià)值評估方法比較考核試卷
- 中國桂花茶行業(yè)市場前景預(yù)測及投資價(jià)值評估分析報(bào)告
- 陜西省縣以下醫(yī)療衛(wèi)生機(jī)構(gòu)定向招聘真題2024
- 【初中信息】數(shù)據(jù)分析與處理(課件)-八年級信息科技全一冊同步教學(xué)(人教版2024)
- 2024年中國郵政儲(chǔ)蓄銀行廣東省分行招聘筆試真題
- (新版)廣電全媒體運(yùn)營師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
- 2024年法律職業(yè)資格考試(試卷一)客觀題試卷與參考答案
- 四年級語文國測模擬試題 (1)附有答案
- MOOC 知識創(chuàng)新與學(xué)術(shù)規(guī)范-南京大學(xué) 中國大學(xué)慕課答案
- 室上性心動(dòng)過速護(hù)理課件
- 吊籃四方驗(yàn)收表
- 漢語教程第二冊(下)課后答案
評論
0/150
提交評論