數(shù)據(jù)庫系統(tǒng)概論:第8章 數(shù)據(jù)庫編程_第1頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 數(shù)據(jù)庫編程_第2頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 數(shù)據(jù)庫編程_第3頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 數(shù)據(jù)庫編程_第4頁
數(shù)據(jù)庫系統(tǒng)概論:第8章 數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩134頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、An Introduction to Database System數(shù)據(jù)庫系統(tǒng)概論An Introduction to Database System第八章第八章 數(shù)據(jù)庫編程數(shù)據(jù)庫編程An Introduction to Database System第八章第八章 數(shù)據(jù)庫編程數(shù)據(jù)庫編程8.1 嵌入式嵌入式SQL8.2 過程化過程化SQL8.3 存儲過程和函數(shù)存儲過程和函數(shù)8.4 ODBC編程編程*8.5 OLE DB*8.6 JDBC編程編程8.7 小結(jié)小結(jié)An Introduction to Database System8.1 嵌入式嵌入式SQLvSQL語言提供了兩種不同的使用方式語言提供

2、了兩種不同的使用方式n交互式交互式n嵌入式嵌入式v為什么要引入嵌入式為什么要引入嵌入式SQLnSQL語言是非過程性語言語言是非過程性語言n事務(wù)處理應(yīng)用需要高級語言事務(wù)處理應(yīng)用需要高級語言v這兩種方式細(xì)節(jié)上有差別,在程序設(shè)計(jì)的環(huán)境下,這兩種方式細(xì)節(jié)上有差別,在程序設(shè)計(jì)的環(huán)境下,SQL語句要做某些必要的擴(kuò)充語句要做某些必要的擴(kuò)充An Introduction to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的處理過程的處理過程8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句8.1.4

3、 使用游標(biāo)的使用游標(biāo)的SQL語句語句8.1.5 動態(tài)動態(tài)SQLAn Introduction to Database System8.1.1 嵌入式嵌入式SQL的處理過程的處理過程v主語言主語言n嵌入式嵌入式SQL是將是將SQL語句嵌入程序設(shè)計(jì)語言中,被嵌入語句嵌入程序設(shè)計(jì)語言中,被嵌入的程序設(shè)計(jì)語言,如的程序設(shè)計(jì)語言,如C、C+、Java,稱為宿主語言,稱為宿主語言,簡稱主語言。簡稱主語言。v處理過程處理過程n預(yù)編譯方法預(yù)編譯方法An Introduction to Database System嵌入式嵌入式SQL的處理過程(續(xù))的處理過程(續(xù)) 關(guān)系數(shù)據(jù)庫管理系統(tǒng)預(yù)處關(guān)系數(shù)據(jù)庫管理系統(tǒng)預(yù)處

4、理程序轉(zhuǎn)換嵌入式理程序轉(zhuǎn)換嵌入式SQL語語句為函數(shù)調(diào)用句為函數(shù)調(diào)用含嵌入式含嵌入式SQL語句語句的主語言程序的主語言程序轉(zhuǎn)換后的轉(zhuǎn)換后的主語言程序主語言程序主語言編譯程序主語言編譯程序編譯處理編譯處理目標(biāo)語言程序目標(biāo)語言程序An Introduction to Database System嵌入式嵌入式SQL的處理過程(續(xù))的處理過程(續(xù)) v為了區(qū)分為了區(qū)分SQL語句與主語言語句,所有語句與主語言語句,所有SQL語句語句必須加前綴必須加前綴EXEC SQL, 主語言為主語言為C語言時,語句格式:語言時,語句格式:nEXEC SQL ;An Introduction to Database S

5、ystem8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的處理過程的處理過程8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句8.1.4 使用游標(biāo)的使用游標(biāo)的SQL語句語句8.1.5 動態(tài)動態(tài)SQLAn Introduction to Database System8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信v將將SQL嵌入到高級語言中混合編程,程序中會含嵌入到高級語言中混合編程,程序中會含有兩種不同計(jì)算模型的語句有兩種不同計(jì)算模型的語句nSQL語句語句l 描述性的面向集合的語句描述性

6、的面向集合的語句l 負(fù)責(zé)操縱數(shù)據(jù)庫負(fù)責(zé)操縱數(shù)據(jù)庫n高級語言語句高級語言語句l 過程性的面向記錄的語句過程性的面向記錄的語句l 負(fù)責(zé)控制邏輯流程負(fù)責(zé)控制邏輯流程n它們之間應(yīng)該如何通信?它們之間應(yīng)該如何通信?An Introduction to Database System嵌入式嵌入式SQL語句與主語言之間的通信(續(xù))語句與主語言之間的通信(續(xù)) v數(shù)據(jù)庫工作單元與源程序工作單元之間的通信數(shù)據(jù)庫工作單元與源程序工作單元之間的通信(1)向主語言傳遞)向主語言傳遞SQL語句的執(zhí)行狀態(tài)信息,使主語言語句的執(zhí)行狀態(tài)信息,使主語言能夠據(jù)此控制程序流程,主要用能夠據(jù)此控制程序流程,主要用SQL通信區(qū)實(shí)現(xiàn)通信

7、區(qū)實(shí)現(xiàn)(2)主語言向)主語言向SQL語句提供參數(shù),主要用主變量實(shí)現(xiàn)語句提供參數(shù),主要用主變量實(shí)現(xiàn)(3)將)將SQL語句查詢數(shù)據(jù)庫的結(jié)果交主語言處理,主要語句查詢數(shù)據(jù)庫的結(jié)果交主語言處理,主要用主變量和游標(biāo)實(shí)現(xiàn)用主變量和游標(biāo)實(shí)現(xiàn)An Introduction to Database System1. SQL通信區(qū)通信區(qū)vSQLCA: SQL Communication AreanSQLCA是一個數(shù)據(jù)結(jié)構(gòu)是一個數(shù)據(jù)結(jié)構(gòu)vSQLCA的用途的用途nSQL語句執(zhí)行后,系統(tǒng)反饋給應(yīng)用程序信息語句執(zhí)行后,系統(tǒng)反饋給應(yīng)用程序信息l 描述系統(tǒng)當(dāng)前工作狀態(tài)描述系統(tǒng)當(dāng)前工作狀態(tài)l 描述運(yùn)行環(huán)境描述運(yùn)行環(huán)境n這些信息

8、將送到這些信息將送到SQL通信區(qū)中通信區(qū)中n應(yīng)用程序從應(yīng)用程序從SQL通信區(qū)中取出這些狀態(tài)信息,據(jù)此決通信區(qū)中取出這些狀態(tài)信息,據(jù)此決定接下來執(zhí)行的語句定接下來執(zhí)行的語句An Introduction to Database SystemSQL通信區(qū)(續(xù))通信區(qū)(續(xù))vSQLCA使用方法使用方法n定義定義SQLCAl 用用EXEC SQL INCLUDE SQLCA定義定義n使用使用SQLCAlSQLCA中有一個存放每次執(zhí)行中有一個存放每次執(zhí)行SQL語句后返回代碼的變語句后返回代碼的變量量SQLCODEl如果如果SQLCODE等于預(yù)定義的常量等于預(yù)定義的常量SUCCESS,則表示,則表示SQL

9、語句成功,否則表示出錯語句成功,否則表示出錯l應(yīng)用程序每執(zhí)行完一條應(yīng)用程序每執(zhí)行完一條SQL 語句之后都應(yīng)該測試一下語句之后都應(yīng)該測試一下SQLCODE的值,以了解該的值,以了解該SQL語句執(zhí)行情況并做相應(yīng)語句執(zhí)行情況并做相應(yīng)處理處理An Introduction to Database System2. 主變量主變量 v主變量主變量n嵌入式嵌入式SQL語句中可以使用主語言的程序變量來輸入語句中可以使用主語言的程序變量來輸入或輸出數(shù)據(jù)或輸出數(shù)據(jù)n在在SQL語句中使用的主語言程序變量簡稱為主變量語句中使用的主語言程序變量簡稱為主變量(Host Variable)An Introduction t

10、o Database System主變量(續(xù))主變量(續(xù)) v主變量的類型主變量的類型n輸入主變量輸入主變量l由應(yīng)用程序?qū)ζ滟x值,由應(yīng)用程序?qū)ζ滟x值,SQL語句引用語句引用n輸出主變量輸出主變量l由由SQL語句對其賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序語句對其賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序An Introduction to Database System主變量(續(xù))主變量(續(xù)) v指示變量指示變量n是一個整型變量,用來是一個整型變量,用來“指示指示”所指主變量的值或條件所指主變量的值或條件n一個主變量可以附帶一個指示變量(一個主變量可以附帶一個指示變量(Indicator Variable)

11、n指示變量的用途指示變量的用途l指示輸入主變量是否為空值指示輸入主變量是否為空值l檢測輸出變量是否為空值,值是否被截斷檢測輸出變量是否為空值,值是否被截斷An Introduction to Database System主變量(續(xù))主變量(續(xù)) v在在SQL語句中使用主變量和指示變量的方法語句中使用主變量和指示變量的方法n說明主變量和指示變量說明主變量和指示變量BEGIN DECLARE SECTION. (說明主變量和指示變量)(說明主變量和指示變量).END DECLARE SECTIONAn Introduction to Database System主變量(續(xù))主變量(續(xù)) v在在

12、SQL語句中使用主變量和指示變量的方法(續(xù))語句中使用主變量和指示變量的方法(續(xù))n使用主變量使用主變量l說明之后的主變量可以在說明之后的主變量可以在SQL語句中任何一個能夠使用表語句中任何一個能夠使用表達(dá)式的地方出現(xiàn)達(dá)式的地方出現(xiàn)l為了與數(shù)據(jù)庫對象名(表名、視圖名、列名等)區(qū)別,為了與數(shù)據(jù)庫對象名(表名、視圖名、列名等)區(qū)別,SQL語句中的主變量名前要加冒號(語句中的主變量名前要加冒號(:)作為標(biāo)志)作為標(biāo)志n使用指示變量使用指示變量l 指示變量前也必須加冒號標(biāo)志指示變量前也必須加冒號標(biāo)志l 必須緊跟在所指主變量之后必須緊跟在所指主變量之后An Introduction to Databas

13、e System主變量(續(xù))主變量(續(xù)) v在在SQL語句之外(主語言語句中)使用主變量和語句之外(主語言語句中)使用主變量和指示變量的方法指示變量的方法n可以直接引用,不必加冒號可以直接引用,不必加冒號An Introduction to Database System3. 游標(biāo)游標(biāo)v為什么要使用游標(biāo)為什么要使用游標(biāo)nSQL語言與主語言具有不同數(shù)據(jù)處理方式語言與主語言具有不同數(shù)據(jù)處理方式nSQL語言是面向集合的,一條語言是面向集合的,一條SQL語句原則上可以產(chǎn)語句原則上可以產(chǎn)生或處理多條記錄生或處理多條記錄n主語言是面向記錄的,一組主變量一次只能存放一條主語言是面向記錄的,一組主變量一次只能

14、存放一條記錄記錄n僅使用主變量并不能完全滿足僅使用主變量并不能完全滿足SQL語句向應(yīng)用程序輸語句向應(yīng)用程序輸出數(shù)據(jù)的要求出數(shù)據(jù)的要求n嵌入式嵌入式SQL引入了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同引入了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同的處理方式的處理方式An Introduction to Database System 游標(biāo)(續(xù))游標(biāo)(續(xù))v游標(biāo)游標(biāo)n游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果語句的執(zhí)行結(jié)果n每個游標(biāo)區(qū)都有一個名字每個游標(biāo)區(qū)都有一個名字n用戶可以用用戶可以用SQL語句逐一從游標(biāo)中獲取記錄,并賦給語句逐一從游標(biāo)中獲取記錄,并賦

15、給主變量,交由主語言進(jìn)一步處理主變量,交由主語言進(jìn)一步處理An Introduction to Database System4. 建立和關(guān)閉數(shù)據(jù)庫連接建立和關(guān)閉數(shù)據(jù)庫連接(1)建立數(shù)據(jù)庫連接)建立數(shù)據(jù)庫連接 EXEC SQL CONNECT TO targetAS connection-nameUSER user-name; ntarget是要連接的數(shù)據(jù)庫服務(wù)器是要連接的數(shù)據(jù)庫服務(wù)器l常見的服務(wù)器標(biāo)識串,如常見的服務(wù)器標(biāo)識串,如: l包含服務(wù)器標(biāo)識的包含服務(wù)器標(biāo)識的SQL串常量串常量 lDEFAULT An Introduction to Database System建立和關(guān)閉數(shù)據(jù)庫連接(

16、續(xù))建立和關(guān)閉數(shù)據(jù)庫連接(續(xù))nconnect-name是可選的連接名,連接名必須是一個是可選的連接名,連接名必須是一個有效的標(biāo)識符有效的標(biāo)識符 n在整個程序內(nèi)只有一個連接時可以不指定連接名在整個程序內(nèi)只有一個連接時可以不指定連接名n程序運(yùn)行過程中可以修改當(dāng)前連接程序運(yùn)行過程中可以修改當(dāng)前連接 EXEC SQL SET CONNECTION connection-name |DEFAULT;An Introduction to Database System建立和關(guān)閉數(shù)據(jù)庫連接(續(xù))建立和關(guān)閉數(shù)據(jù)庫連接(續(xù))(2)關(guān)閉數(shù)據(jù)庫連接)關(guān)閉數(shù)據(jù)庫連接 EXEC SQL DISCONNECT conn

17、ection;An Introduction to Database System5. 程序?qū)嵗绦驅(qū)嵗齰例例8.1 依次檢查某個系的學(xué)生記錄,交互式更新依次檢查某個系的學(xué)生記錄,交互式更新某些學(xué)生年齡。某些學(xué)生年齡。EXEC SQL BEGIN DECLARE SECTION; /*主變量說明開始主變量說明開始*/ char Deptname20;char Hsno9;char Hsname20; char Hssex2;int HSage;int NEWAGE;EXEC SQL END DECLARE SECTION; /*主變量說明結(jié)束主變量說明結(jié)束*/long SQLCODE;EXEC

18、 SQL INCLUDE SQLCA; /*定義定義SQL通信區(qū)通信區(qū)*/An Introduction to Database System程序?qū)嵗ɡm(xù))程序?qū)嵗ɡm(xù))int main(void) /*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:5432

19、1 USER SYSTEM/MANAGER; /*連接數(shù)據(jù)庫連接數(shù)據(jù)庫TEST*/EXEC SQL DECLARE SX CURSOR FOR /*定義游標(biāo)定義游標(biāo)SX*/SELECT Sno,Sname,Ssex,Sage /*SX對應(yīng)的語句對應(yīng)的語句*/FROM StudentWHERE SDept = :deptname;EXEC SQL OPEN SX; /*打開游標(biāo)打開游標(biāo)SX,指向查詢結(jié)果的第一行,指向查詢結(jié)果的第一行*/An Introduction to Database System程序?qū)嵗ɡm(xù))程序?qū)嵗ɡm(xù))for ( ; ; ) /*用循環(huán)結(jié)構(gòu)逐條處理結(jié)果集中的記錄用循環(huán)

20、結(jié)構(gòu)逐條處理結(jié)果集中的記錄*/ EXEC SQL FETCH SX INTO :HSno,:Hsname,:HSsex,:HSage; /*推進(jìn)游標(biāo),將當(dāng)前數(shù)據(jù)放入主變量推進(jìn)游標(biāo),將當(dāng)前數(shù)據(jù)放入主變量*/if (SQLCA.SQLCODE!= 0) /*SQLCODE != 0,表示操作不成功,表示操作不成功*/break; /*利用利用SQLCA中的狀態(tài)信息決定何時退出循環(huán)中的狀態(tài)信息決定何時退出循環(huán)*/if(count+ = 0) /*如果是第一行的話,先打出行頭如果是第一行的話,先打出行頭*/ printf(n%-10s %-20s %-10s %-10sn, Sno“,Sname“,S

21、sex, Sage);printf(%-10s %-20s %-10s %-10dn“, HSno,Hsname,Hssex,HSage); /*打印查詢結(jié)果打印查詢結(jié)果*/ printf(“UPDATE AGE(y/n)?”); /*詢問用戶是否要更新該學(xué)生的年齡詢問用戶是否要更新該學(xué)生的年齡*/ doscanf(%c,&yn); while(yn != N & yn != n & yn != Y & yn != y);An Introduction to Database System程序?qū)嵗ɡm(xù))程序?qū)嵗ɡm(xù)) if (yn = y | yn = Y) /

22、*如果選擇更新操作如果選擇更新操作*/ printf(INPUT NEW AGE:); scanf(%d,&NEWAGE); /*用戶輸入新年齡到主變量中用戶輸入新年齡到主變量中*/ EXEC SQL UPDATE Student /*嵌入式嵌入式SQL更新語句更新語句*/ SET Sage = :NEWAGE WHERE CURRENT OF SX; /*對當(dāng)前游標(biāo)指向的學(xué)生年齡進(jìn)行更新對當(dāng)前游標(biāo)指向的學(xué)生年齡進(jìn)行更新*/ EXEC SQL CLOSE SX; /*關(guān)閉游標(biāo)關(guān)閉游標(biāo)SX,不再和查詢結(jié)果對應(yīng),不再和查詢結(jié)果對應(yīng)*/ EXEC SQL COMMIT WORK; /*提交更

23、新提交更新*/ EXEC SQL DISCONNECT TEST; /*斷開數(shù)據(jù)庫連接斷開數(shù)據(jù)庫連接*/An Introduction to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的處理過程的處理過程8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句8.1.4 使用游標(biāo)的使用游標(biāo)的SQL語句語句8.1.5 動態(tài)動態(tài)SQLAn Introduction to Database System8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句v不用游標(biāo)的不用游標(biāo)的SQL語句的種類語句的種

24、類n 說明性語句說明性語句n 數(shù)據(jù)定義語句數(shù)據(jù)定義語句n 數(shù)據(jù)控制語句數(shù)據(jù)控制語句n 查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語句語句n 非非CURRENT形式的增刪改語句形式的增刪改語句 An Introduction to Database System不用游標(biāo)的不用游標(biāo)的SQL語句(續(xù))語句(續(xù))1. 查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語句語句 2. 非非CURRENT形式的增刪改語句形式的增刪改語句An Introduction to Database System1. 查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語句語句v這類語句不需要使用游標(biāo),只需用這類語

25、句不需要使用游標(biāo),只需用INTO子句指定子句指定存放查詢結(jié)果的主變量。存放查詢結(jié)果的主變量。 v例例8.2 根據(jù)學(xué)生號碼查詢學(xué)生信息。根據(jù)學(xué)生號碼查詢學(xué)生信息。EXEC SQL SELECT Sno,Sname,Ssex,Sage,Sdept INTO:Hsno,:Hname,:Hsex,:Hage,:Hdept FROM Student WHERE Sno=:givensno; /*把要查詢的學(xué)生的學(xué)號賦給為了主變量把要查詢的學(xué)生的學(xué)號賦給為了主變量givensno*/An Introduction to Database System查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語句(續(xù)

26、)語句(續(xù))v INTO子句、子句、WHERE子句和子句和HAVING短語的條件短語的條件表達(dá)式中均可以使用主變量表達(dá)式中均可以使用主變量v 查詢返回的記錄中,可能某些列為空值查詢返回的記錄中,可能某些列為空值NULLv 如果查詢結(jié)果實(shí)際上并不是單條記錄,而是多如果查詢結(jié)果實(shí)際上并不是單條記錄,而是多條記錄,則程序出錯,關(guān)系數(shù)據(jù)庫管理系統(tǒng)會在條記錄,則程序出錯,關(guān)系數(shù)據(jù)庫管理系統(tǒng)會在SQLCA中返回錯誤信息中返回錯誤信息 An Introduction to Database System查詢結(jié)果為單記錄的查詢結(jié)果為單記錄的SELECT語句(續(xù))語句(續(xù))v例例8.3 查詢某個學(xué)生選修某門課程

27、的成績。假設(shè)查詢某個學(xué)生選修某門課程的成績。假設(shè)已經(jīng)把將要查詢的學(xué)生的學(xué)號賦給了主變量已經(jīng)把將要查詢的學(xué)生的學(xué)號賦給了主變量givensno,將課程號賦給了主變量,將課程號賦給了主變量givencno。EXEC SQL SELECT Sno,Cno,Grade INTO :Hsno,:Hcno,:Hgrade:Gradeid /*指示變量指示變量Gradeid*/ FROM SC WHERE Sno=:givensno AND Cno=:givencno;如果如果Gradeid 0,不論,不論Hgrade為何值,均認(rèn)為該學(xué)生成為何值,均認(rèn)為該學(xué)生成績?yōu)榭罩???優(yōu)榭罩怠n Introducti

28、on to Database System2. 非非CURRENT形式的增刪改語句形式的增刪改語句v在在UPDATE的的SET子句和子句和WHERE子句中可以使用子句中可以使用主變量,主變量,SET子句還可以使用指示變量子句還可以使用指示變量 v例例8.4 修改某個學(xué)生選修修改某個學(xué)生選修1號課程的成績。號課程的成績。EXEC SQL UPDATE SC SET Grade=:newgrade /*修改的成績已賦給主變量:修改的成績已賦給主變量:newgrade*/ WHERE Sno=:givensno;/*學(xué)號賦給主變量:學(xué)號賦給主變量:givensno*/An Introduction

29、to Database System非非CURRENT形式的增刪改語句(續(xù))形式的增刪改語句(續(xù))v例例8.5 某個學(xué)生新選修了某門課程,將有關(guān)記錄某個學(xué)生新選修了某門課程,將有關(guān)記錄插入插入SC表中。假設(shè)插入的學(xué)號已賦給主變量表中。假設(shè)插入的學(xué)號已賦給主變量stdno,課程號已賦給主變量,課程號已賦給主變量couno。gradeid=-1; /*gradeid為指示變量,賦為負(fù)值為指示變量,賦為負(fù)值*/EXEC SQL INSERT INTO SC(Sno,Cno,Grade) VALUES(:stdno,:couno,:gr :gradeid); /*:stdno,:couno,:gr為主

30、變量為主變量*/ 由于該學(xué)生剛選修課程,成績應(yīng)為空,所以要把指示變量由于該學(xué)生剛選修課程,成績應(yīng)為空,所以要把指示變量賦為負(fù)值賦為負(fù)值A(chǔ)n Introduction to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的處理過程的處理過程8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句8.1.4 使用游標(biāo)的使用游標(biāo)的SQL語句語句8.1.5 動態(tài)動態(tài)SQLAn Introduction to Database System8.1.4 使用游標(biāo)的使用游標(biāo)的SQL語句語句v必須使用游標(biāo)的

31、必須使用游標(biāo)的SQL語句語句n查詢結(jié)果為多條記錄的查詢結(jié)果為多條記錄的SELECT語句語句nCURRENT形式的形式的UPDATE語句語句nCURRENT形式的形式的DELETE語句語句An Introduction to Database System使用游標(biāo)的使用游標(biāo)的SQL語句(續(xù))語句(續(xù))1. 查詢結(jié)果為多條記錄的查詢結(jié)果為多條記錄的SELECT語句語句2. CURRENT形式的形式的UPDATE和和DELETE語句語句An Introduction to Database System1. 查詢結(jié)果為多條記錄的查詢結(jié)果為多條記錄的SELECT語句語句v使用游標(biāo)的步驟使用游標(biāo)的步驟(

32、1)說明游標(biāo))說明游標(biāo)(2)打開游標(biāo))打開游標(biāo)(3)推進(jìn)游標(biāo)指針并取當(dāng)前記錄)推進(jìn)游標(biāo)指針并取當(dāng)前記錄 (4)關(guān)閉游標(biāo))關(guān)閉游標(biāo)An Introduction to Database System(1)說明游標(biāo))說明游標(biāo)v使用使用DECLARE語句語句v語句格式語句格式EXEC SQL DECLARE CURSOR FOR ;v功能功能n是一條說明性語句,這時關(guān)系數(shù)據(jù)庫管理系統(tǒng)并不執(zhí)行是一條說明性語句,這時關(guān)系數(shù)據(jù)庫管理系統(tǒng)并不執(zhí)行SELECT語句語句An Introduction to Database System(2)打開游標(biāo))打開游標(biāo)v使用使用OPEN語句語句v語句格式語句格式 EXE

33、C SQL OPEN ;v功能功能n打開游標(biāo)實(shí)際上是執(zhí)行相應(yīng)的打開游標(biāo)實(shí)際上是執(zhí)行相應(yīng)的SELECT語句,把查詢結(jié)語句,把查詢結(jié)果取到緩沖區(qū)中果取到緩沖區(qū)中n這時游標(biāo)處于活動狀態(tài),指針指向查詢結(jié)果集中的第一這時游標(biāo)處于活動狀態(tài),指針指向查詢結(jié)果集中的第一條記錄條記錄An Introduction to Database System(3)推進(jìn)游標(biāo)指針并取當(dāng)前記錄)推進(jìn)游標(biāo)指針并取當(dāng)前記錄 v使用使用FETCH語句語句v語句格式語句格式 EXEC SQL FETCH INTO ,.;v功能功能n指定方向推動游標(biāo)指針,同時將緩沖區(qū)中的當(dāng)前記錄取指定方向推動游標(biāo)指針,同時將緩沖區(qū)中的當(dāng)前記錄取出來送

34、至主變量供主語言進(jìn)一步處理出來送至主變量供主語言進(jìn)一步處理An Introduction to Database System(4)關(guān)閉游標(biāo))關(guān)閉游標(biāo)v使用使用CLOSE語句語句v語句格式語句格式 EXEC SQL CLOSE ;v功能功能n關(guān)閉游標(biāo),釋放結(jié)果集占用的緩沖區(qū)及其他資源關(guān)閉游標(biāo),釋放結(jié)果集占用的緩沖區(qū)及其他資源v說明說明n游標(biāo)被關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系游標(biāo)被關(guān)閉后,就不再和原來的查詢結(jié)果集相聯(lián)系n被關(guān)閉的游標(biāo)可以再次被打開,與新的查詢結(jié)果相聯(lián)系被關(guān)閉的游標(biāo)可以再次被打開,與新的查詢結(jié)果相聯(lián)系A(chǔ)n Introduction to Database System2. C

35、URRENT形式的形式的UPDATE語句和語句和DELETE語句語句vCURRENT形式的形式的UPDATE語句和語句和DELETE語句語句的用途的用途n非非CURRENT形式的形式的UPDATE語句和語句和DELETE語句語句l面向集合的操作面向集合的操作l一次修改或刪除所有滿足條件的記錄一次修改或刪除所有滿足條件的記錄An Introduction to Database SystemCURRENT形式的形式的UPDATE語句和語句和DELETE語句(續(xù))語句(續(xù))vCURRENT形式的形式的UPDATE語句和語句和DELETE語句語句的用途(續(xù))的用途(續(xù))n如果只想修改或刪除其中某個記

36、錄如果只想修改或刪除其中某個記錄l用帶游標(biāo)的用帶游標(biāo)的SELECT語句查出所有滿足條件的記錄語句查出所有滿足條件的記錄l從中進(jìn)一步找出要修改或刪除的記錄從中進(jìn)一步找出要修改或刪除的記錄l用用CURRENT形式的形式的UPDATE語句和語句和DELETE語句修改語句修改或刪除之或刪除之lUPDATE語句和語句和DELETE語句中要用子句語句中要用子句WHERE CURRENT OF 表示修改或刪除的是最近一次取出的記錄,即游標(biāo)指針表示修改或刪除的是最近一次取出的記錄,即游標(biāo)指針指向的記錄指向的記錄 An Introduction to Database SystemCURRENT形式的形式的UP

37、DATE語句和語句和DELETE語句(續(xù))語句(續(xù))v不能使用不能使用CURRENT形式的形式的UPDATE語句和語句和DELETE語句語句n當(dāng)游標(biāo)定義中的當(dāng)游標(biāo)定義中的SELECT語句帶有語句帶有UNION或或ORDER BY子句子句 n該該SELECT語句相當(dāng)于定義了一個不可更新的視圖語句相當(dāng)于定義了一個不可更新的視圖 An Introduction to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的處理過程的處理過程8.1.2 嵌入式嵌入式SQL語句與主語言之間的通信語句與主語言之間的通信8.1.3 不用游標(biāo)的不用游標(biāo)的SQL語句語句8.1.4

38、 使用游標(biāo)的使用游標(biāo)的SQL語句語句8.1.5 動態(tài)動態(tài)SQLAn Introduction to Database System 8.1.5 動態(tài)動態(tài)SQLv靜態(tài)嵌入式靜態(tài)嵌入式SQLn靜態(tài)嵌入式靜態(tài)嵌入式SQL語句能夠滿足一般要求語句能夠滿足一般要求 n無法滿足要到執(zhí)行時才能夠確定要提交的無法滿足要到執(zhí)行時才能夠確定要提交的SQL語句、語句、查詢的條件查詢的條件 v動態(tài)嵌入式動態(tài)嵌入式SQLn允許在程序運(yùn)行過程中臨時允許在程序運(yùn)行過程中臨時“組裝組裝”SQL語句語句n支持動態(tài)組裝支持動態(tài)組裝SQL語句和動態(tài)參數(shù)兩種形式語句和動態(tài)參數(shù)兩種形式 An Introduction to Datab

39、ase System動態(tài)動態(tài)SQL(續(xù))(續(xù))1. 使用使用SQL語句主變量語句主變量 2. 動態(tài)參數(shù)動態(tài)參數(shù)3. 執(zhí)行準(zhǔn)備好的語句(執(zhí)行準(zhǔn)備好的語句(EXECUTE)An Introduction to Database System1. 使用使用SQL語句主變量語句主變量vSQL語句主變量語句主變量n程序主變量包含的內(nèi)容是程序主變量包含的內(nèi)容是SQL語句的內(nèi)容,而不是原語句的內(nèi)容,而不是原來保存數(shù)據(jù)的輸入或輸出變量來保存數(shù)據(jù)的輸入或輸出變量nSQL語句主變量在程序執(zhí)行期間可以設(shè)定不同的語句主變量在程序執(zhí)行期間可以設(shè)定不同的SQL語句,然后立即執(zhí)行語句,然后立即執(zhí)行 An Introduct

40、ion to Database System使用使用SQL語句主變量(續(xù))語句主變量(續(xù))v例例8.6 創(chuàng)建基本表創(chuàng)建基本表TEST。EXEC SQL BEGIN DECLARE SECTION; const char *stmt=CREATE TABLE test(a int); /*SQL語句主變量,內(nèi)容是創(chuàng)建表的語句主變量,內(nèi)容是創(chuàng)建表的SQL語句語句*/EXEC SQL END DECLARE SECTION; . EXEC SQL EXECUTE IMMEDIATE :stmt; /*執(zhí)行動態(tài)執(zhí)行動態(tài)SQL語句語句*/An Introduction to Database Syste

41、m2. 動態(tài)參數(shù)動態(tài)參數(shù)v動態(tài)參數(shù)動態(tài)參數(shù)nSQL語句中的可變元素語句中的可變元素n使用參數(shù)符號(使用參數(shù)符號(?)表示該位置的數(shù)據(jù)在運(yùn)行時設(shè)定)表示該位置的數(shù)據(jù)在運(yùn)行時設(shè)定v和主變量的區(qū)別和主變量的區(qū)別n動態(tài)參數(shù)的輸入不是編譯時完成綁定動態(tài)參數(shù)的輸入不是編譯時完成綁定n而是通過而是通過 PREPARE語句準(zhǔn)備主變量和執(zhí)行語句語句準(zhǔn)備主變量和執(zhí)行語句EXECUTE綁定數(shù)據(jù)或主變量來完成綁定數(shù)據(jù)或主變量來完成 An Introduction to Database System動態(tài)參數(shù)(續(xù))動態(tài)參數(shù)(續(xù))v使用動態(tài)參數(shù)的步驟使用動態(tài)參數(shù)的步驟(1)聲明)聲明SQL語句主變量語句主變量(2)準(zhǔn)備)

42、準(zhǔn)備SQL語句(語句(PREPARE)EXEC SQL PREPARE FROM ;An Introduction to Database System3. 執(zhí)行準(zhǔn)備好的語句(執(zhí)行準(zhǔn)備好的語句(EXECUTE)vEXEC SQL EXECUTE INTO USING ;An Introduction to Database System執(zhí)行準(zhǔn)備好的語句(執(zhí)行準(zhǔn)備好的語句(EXECUTE)(續(xù))(續(xù))v例例8.7 向向TEST中插入元組。中插入元組。EXEC SQL BEGIN DECLARE SECTION;const char *stmt = INSERT INTO test VALUES(

43、?); /*聲明聲明SQL主變量內(nèi)容是主變量內(nèi)容是INSERT語句語句 */EXEC SQL END DECLARE SECTION;. EXEC SQL PREPARE mystmt FROM :stmt; /*準(zhǔn)備語句準(zhǔn)備語句*/. EXEC SQL EXECUTE mystmt USING 100; /*執(zhí)行語句,設(shè)定執(zhí)行語句,設(shè)定INSERT語句插入值語句插入值100 */EXEC SQL EXECUTE mystmt USING 200; /* 執(zhí)行語句,設(shè)定執(zhí)行語句,設(shè)定INSERT語句插入值語句插入值200 */An Introduction to Database System

44、第八章第八章 數(shù)據(jù)庫編程數(shù)據(jù)庫編程8.1 嵌入式嵌入式SQL8.2 過程化過程化SQL8.3 存儲過程和函數(shù)存儲過程和函數(shù)8.4 ODBC編程編程*8.5 OLE DB*8.6 JDBC編程編程8.7 小結(jié)小結(jié)An Introduction to Database System8.2 過程化過程化SQL8.2.1 過程化過程化SQL的塊結(jié)構(gòu)的塊結(jié)構(gòu)8.2.2 變量和常量的定義變量和常量的定義8.2.3 流程控制流程控制An Introduction to Database System8.2.1 過程化過程化SQL的塊結(jié)構(gòu)的塊結(jié)構(gòu)v過程化過程化SQL nSQL的擴(kuò)展的擴(kuò)展 n增加了過程化語句功

45、能增加了過程化語句功能 n基本結(jié)構(gòu)是塊基本結(jié)構(gòu)是塊l塊之間可以互相嵌套塊之間可以互相嵌套 l每個塊完成一個邏輯操作每個塊完成一個邏輯操作 An Introduction to Database System過程化過程化SQL的塊結(jié)構(gòu)(續(xù))的塊結(jié)構(gòu)(續(xù))v過程化過程化SQL塊的基本結(jié)構(gòu)塊的基本結(jié)構(gòu)1. 定義部分定義部分 DECLARE 變量、常量、游標(biāo)、異常等變量、常量、游標(biāo)、異常等 l定義的變量、常量等只能在該基本塊中使用定義的變量、常量等只能在該基本塊中使用l當(dāng)基本塊執(zhí)行結(jié)束時,定義就不再存在當(dāng)基本塊執(zhí)行結(jié)束時,定義就不再存在An Introduction to Database Syste

46、m過程化過程化SQL的塊結(jié)構(gòu)(續(xù))的塊結(jié)構(gòu)(續(xù))v過程化過程化SQL塊的基本結(jié)構(gòu)(續(xù))塊的基本結(jié)構(gòu)(續(xù))2. 執(zhí)行部分執(zhí)行部分 BEGIN SQL語句、過程化語句、過程化SQL的流程控制語句的流程控制語句 EXCEPTION 異常處理部分異常處理部分 END;An Introduction to Database System8.2 過程化過程化SQL8.2.1 過程化過程化SQL的塊結(jié)構(gòu)的塊結(jié)構(gòu)8.2.2 變量和常量的定義變量和常量的定義8.2.3 流程控制流程控制An Introduction to Database System8.2.2 變量和常量的定義變量和常量的定義1. 變量定義變

47、量定義n變量名變量名 數(shù)據(jù)類型數(shù)據(jù)類型 NOT NULL:=初值表達(dá)式初值表達(dá)式或或n變量名變量名 數(shù)據(jù)類型數(shù)據(jù)類型 NOT NULL 初值表達(dá)式初值表達(dá)式2. 常量定義常量定義n常量名常量名 數(shù)據(jù)類型數(shù)據(jù)類型 CONSTANT :=常量表達(dá)式常量表達(dá)式n常量必須要給一個值,并且該值在存在期間或常量的常量必須要給一個值,并且該值在存在期間或常量的作用域內(nèi)不能改變。如果試圖修改它,過程化作用域內(nèi)不能改變。如果試圖修改它,過程化SQL將將返回一個異常返回一個異常3. 賦值語句賦值語句n變量名稱變量名稱 :=表達(dá)式表達(dá)式An Introduction to Database System8.2 過程

48、化過程化SQL8.2.1 過程化過程化SQL的塊結(jié)構(gòu)的塊結(jié)構(gòu)8.2.2 變量和常量的定義變量和常量的定義8.2.3 流程控制流程控制An Introduction to Database System8.2.3 流程控制流程控制v過程化過程化SQL功能功能1. 條件控制語句條件控制語句2. 循環(huán)控制語句循環(huán)控制語句 3. 錯誤處理錯誤處理 An Introduction to Database System流程控制(續(xù))流程控制(續(xù))1. 條件控制語句條件控制語句 IF-THEN,IF-THEN-ELSE和嵌套的和嵌套的IF語句語句 (1)IF condition THEN Sequence_

49、of_statements; END IF; (2)IF condition THEN Sequence_of_statements1; ELSE Sequence_of_statements2; END IF;(3)在)在THEN和和ELSE子句中還可以再包含子句中還可以再包含IF語句,即語句,即IF語句可以嵌套語句可以嵌套 An Introduction to Database System流程控制(續(xù))流程控制(續(xù))2. 循環(huán)控制語句循環(huán)控制語句 LOOP,WHILE-LOOP和和FOR-LOOP (1)簡單的循環(huán)語句)簡單的循環(huán)語句LOOP LOOP Sequence_of_state

50、ments; END LOOP; 多數(shù)數(shù)據(jù)庫服務(wù)器的過程化多數(shù)數(shù)據(jù)庫服務(wù)器的過程化SQL都提供都提供EXIT、BREAK或或 LEAVE等循環(huán)結(jié)束語句,保證等循環(huán)結(jié)束語句,保證LOOP語句塊能夠結(jié)束語句塊能夠結(jié)束An Introduction to Database System流程控制(續(xù))流程控制(續(xù))2. 循環(huán)控制語句(續(xù))循環(huán)控制語句(續(xù))(2)WHILE-LOOP WHILE condition LOOP Sequence_of_statements; END LOOP;l每次執(zhí)行循環(huán)體語句之前,首先對條件進(jìn)行求值每次執(zhí)行循環(huán)體語句之前,首先對條件進(jìn)行求值l如果條件為真,則執(zhí)行循環(huán)體

51、內(nèi)的語句序列如果條件為真,則執(zhí)行循環(huán)體內(nèi)的語句序列l(wèi)如果條件為假,則跳過循環(huán)并把控制傳遞給下一個語句如果條件為假,則跳過循環(huán)并把控制傳遞給下一個語句 An Introduction to Database System流程控制(續(xù))流程控制(續(xù))2. 循環(huán)控制語句(續(xù))循環(huán)控制語句(續(xù))(3)FOR-LOOP FOR count IN REVERSE bound1 bound2 LOOP Sequence_of_statements; END LOOP;An Introduction to Database System流程控制(續(xù))流程控制(續(xù))3. 錯誤處理錯誤處理n如果過程化如果過程化S

52、QL在執(zhí)行時出現(xiàn)異常,則應(yīng)該讓程序在在執(zhí)行時出現(xiàn)異常,則應(yīng)該讓程序在產(chǎn)生異常的語句處停下來,根據(jù)異常的類型去執(zhí)行異產(chǎn)生異常的語句處停下來,根據(jù)異常的類型去執(zhí)行異常處理語句常處理語句 nSQL標(biāo)準(zhǔn)對數(shù)據(jù)庫服務(wù)器提供什么樣的異常處理做出標(biāo)準(zhǔn)對數(shù)據(jù)庫服務(wù)器提供什么樣的異常處理做出了建議,要求過程化了建議,要求過程化SQL管理器提供完善的異常處理管理器提供完善的異常處理機(jī)制機(jī)制 An Introduction to Database System第八章第八章 數(shù)據(jù)庫編程數(shù)據(jù)庫編程8.1 嵌入式嵌入式SQL8.2 過程化過程化SQL8.3 存儲過程和函數(shù)存儲過程和函數(shù)8.4 ODBC編程編程*8.5 O

53、LE DB*8.6 JDBC編程編程8.7 小結(jié)小結(jié)An Introduction to Database System8.3 存儲過程和函數(shù)存儲過程和函數(shù)8.3.1 存儲過程存儲過程8.3.2 函數(shù)函數(shù)*8.3.3 過程化過程化SQL中的游標(biāo)中的游標(biāo)An Introduction to Database System8.3.1 存儲過程存儲過程v過程化過程化SQL塊類型塊類型n命名塊命名塊l編譯后保存在數(shù)據(jù)庫中,可以被反復(fù)調(diào)用,運(yùn)行速度較編譯后保存在數(shù)據(jù)庫中,可以被反復(fù)調(diào)用,運(yùn)行速度較快,過程和函數(shù)是命名塊快,過程和函數(shù)是命名塊 n匿名塊匿名塊l每次執(zhí)行時都要進(jìn)行編譯,它不能被存儲到數(shù)據(jù)庫中

54、,每次執(zhí)行時都要進(jìn)行編譯,它不能被存儲到數(shù)據(jù)庫中,也不能在其他過程化也不能在其他過程化SQL塊中調(diào)用塊中調(diào)用 An Introduction to Database System存儲過程(續(xù))存儲過程(續(xù))1. 存儲過程的優(yōu)點(diǎn)存儲過程的優(yōu)點(diǎn) 2. 存儲過程的用戶接口存儲過程的用戶接口 An Introduction to Database System存儲過程(續(xù))存儲過程(續(xù))v存儲過程:由過程化存儲過程:由過程化SQL語句書寫的過程,經(jīng)編語句書寫的過程,經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,使用時只要譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,使用時只要調(diào)用即可。調(diào)用即可。v存儲過程的優(yōu)點(diǎn)存儲過程的優(yōu)點(diǎn)

55、(1)運(yùn)行效率高)運(yùn)行效率高(2)降低了客戶機(jī)和服務(wù)器之間的通信量)降低了客戶機(jī)和服務(wù)器之間的通信量(3)方便實(shí)施企業(yè)規(guī)則)方便實(shí)施企業(yè)規(guī)則An Introduction to Database System存儲過程(續(xù))存儲過程(續(xù))v存儲過程的用戶接口存儲過程的用戶接口(1)創(chuàng)建存儲過程)創(chuàng)建存儲過程 (2)執(zhí)行存儲過程)執(zhí)行存儲過程 (3)修改存儲過程)修改存儲過程(4)刪除存儲過程)刪除存儲過程 An Introduction to Database System2. 存儲過程的用戶接口存儲過程的用戶接口(1)創(chuàng)建存儲過程)創(chuàng)建存儲過程CREATE OR REPLACE PROCEDU

56、RE 過程名過程名(參數(shù)參數(shù)1,參數(shù)參數(shù)2,.) AS ;n過程名:數(shù)據(jù)庫服務(wù)器合法的對象標(biāo)識過程名:數(shù)據(jù)庫服務(wù)器合法的對象標(biāo)識n參數(shù)列表:用名字來標(biāo)識調(diào)用時給出的參數(shù)值,必須參數(shù)列表:用名字來標(biāo)識調(diào)用時給出的參數(shù)值,必須指定值的數(shù)據(jù)類型。參數(shù)也可以定義輸入?yún)?shù)、輸出指定值的數(shù)據(jù)類型。參數(shù)也可以定義輸入?yún)?shù)、輸出參數(shù)或輸入?yún)?shù)或輸入/輸出參數(shù),默認(rèn)為輸入?yún)?shù)輸出參數(shù),默認(rèn)為輸入?yún)?shù)n過程體:是一個過程體:是一個,包括聲明部分和可,包括聲明部分和可執(zhí)行語句部分執(zhí)行語句部分 An Introduction to Database System存儲過程的用戶接口(續(xù))存儲過程的用戶接口(續(xù))v 例例

57、8.8 利用存儲過程來實(shí)現(xiàn)下面的應(yīng)用:從賬戶利用存儲過程來實(shí)現(xiàn)下面的應(yīng)用:從賬戶1轉(zhuǎn)指定數(shù)轉(zhuǎn)指定數(shù)額的款項(xiàng)到賬戶額的款項(xiàng)到賬戶2中。中。CREATE OR REPLACE PROCEDURE TRANSFER(inAccount INT,outAccount INT,amount FLOAT) /*定義存儲過程定義存儲過程TRANSFER,其參數(shù)為轉(zhuǎn)入賬戶、轉(zhuǎn)出賬戶、轉(zhuǎn)賬額度,其參數(shù)為轉(zhuǎn)入賬戶、轉(zhuǎn)出賬戶、轉(zhuǎn)賬額度*/AS DECLARE/*定義變量定義變量*/ totalDepositOut Float; totalDepositIn Float;inAccountnum INT;An Int

58、roduction to Database System存儲過程的用戶接口(續(xù))存儲過程的用戶接口(續(xù)) BEGIN /*檢查轉(zhuǎn)出賬戶的余額檢查轉(zhuǎn)出賬戶的余額 */ SELECT Total INTO totalDepositOut FROM Accout WHERE accountnum=outAccount; IF totalDepositOut IS NULL THEN /*如果轉(zhuǎn)出賬戶不存在或賬戶中沒有存款如果轉(zhuǎn)出賬戶不存在或賬戶中沒有存款*/ ROLLBACK; /*回滾事務(wù)回滾事務(wù)*/ RETURN; END IF; An Introduction to Database Syst

59、em存儲過程的用戶接口(續(xù))存儲過程的用戶接口(續(xù))IF totalDeposit Out amount THEN /*如果賬戶存款不足如果賬戶存款不足*/ROLLBACK; /*回滾事務(wù)回滾事務(wù)*/RETURN;END IF;SELECT Accountnum INTO inAccountnum FROM AccountWHERE accountnum=inAccount;IF inAccount IS NULL THEN /*如果轉(zhuǎn)入賬戶不存在如果轉(zhuǎn)入賬戶不存在*/ ROLLBACK; /*回滾事務(wù)回滾事務(wù)*/RETURN;ENDIF;An Introduction to Database

60、 System存儲過程的用戶接口(續(xù))存儲過程的用戶接口(續(xù))UPDATE Account SET total=total-amount WHERE accountnum=outAccount; /* 修改轉(zhuǎn)出賬戶余額,減去轉(zhuǎn)出額修改轉(zhuǎn)出賬戶余額,減去轉(zhuǎn)出額 */UPDATE Account SET total=total + amount WHERE accountnum=inAccount; /* 修改轉(zhuǎn)入賬戶余額,增加轉(zhuǎn)入額修改轉(zhuǎn)入賬戶余額,增加轉(zhuǎn)入額 */COMMIT; /* 提交轉(zhuǎn)賬事務(wù)提交轉(zhuǎn)賬事務(wù) */END;An Introduction to Database System存儲過程的用戶接口(續(xù))存儲過程的用戶接

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論