SQL(Structured Query Language)是關(guān)系數(shù)據(jù)庫(kù)的基本操作語(yǔ)言,它主要包括數(shù)據(jù)查詢(Query statements)、數(shù)據(jù)操縱(Data Manipulation Language statements)、數(shù)據(jù)定義(Data Definition Language statements)等功能,是應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行交互操作的接口。PL/SQL(Procedural Language/SQL)是Oracle特有的編程語(yǔ)言,它可以像其他高級(jí)編程語(yǔ)言一樣,編寫(xiě)出各種完成數(shù)據(jù)庫(kù)操作功能的程序。由于PL/SQL由Oracle系統(tǒng)本身編譯執(zhí)行,所以程序的運(yùn)行效率更高。
《Oracle 12c SQL和PL/SQL編程指南》為Oracle數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員提供了SQL使用指南和PL/SQL編程技術(shù)。通過(guò)學(xué)習(xí)本書(shū),讀者不僅可以掌握SQL和PL/SQL的基礎(chǔ)知識(shí),而且可以掌握Oracle 12c SQL和PL/SQL的許多高級(jí)特征。
《Oracle 12c SQL和PL/SQL編程指南》既可作為高等院校計(jì)算機(jī)相關(guān)專業(yè)的輔助教材,也可作為各類高級(jí)數(shù)據(jù)庫(kù)編程人員的參考書(shū)。本書(shū)的編寫(xiě)既考慮了SQL和PL/SQL的初學(xué)者,同時(shí)也兼顧了有經(jīng)驗(yàn)的PL/SQL編程人員,本書(shū)還可以作為Oracle 12c培訓(xùn)班的教材。
隨著Oracle公司提供了基于Windows平臺(tái)的Oracle版本以后,Oracle數(shù)據(jù)庫(kù)在國(guó)內(nèi)外擁有更為廣泛的應(yīng)用市場(chǎng)。近些年來(lái),隨著國(guó)內(nèi)中小企業(yè)對(duì)數(shù)據(jù)庫(kù)可靠性、安全性要求的提高,基于Windows平臺(tái)的Oracle數(shù)據(jù)庫(kù)服務(wù)器獲得了廣泛青睞。《Oracle 12c SQL和PL/SQL編程指南》在編寫(xiě)時(shí),既考慮了Oracle數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)的初學(xué)者,也兼顧到了有一定基礎(chǔ)的管理和開(kāi)發(fā)人員。同時(shí),對(duì)那些想學(xué)習(xí)SQL語(yǔ)句或利用PL/SQL提高Oracle數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)能力的人士,也可以起到一定的借鑒作用。
前 言
Oracle公司是世界排名前列的國(guó)際大型企業(yè)。Oracle數(shù)據(jù)庫(kù)是世界領(lǐng)先、性能優(yōu)異的大型數(shù)據(jù)庫(kù)管理系統(tǒng)。Oracle數(shù)據(jù)庫(kù)廣泛地應(yīng)用在金融、通信、航空等領(lǐng)域。雖然有多種數(shù)據(jù)庫(kù)管理系統(tǒng)可供用戶選擇,但Oracle數(shù)據(jù)庫(kù)以其處理的并發(fā)數(shù)據(jù)量極大,極高的可靠性、安全性和可擴(kuò)展性贏得了廣大高端用戶的青睞。早期Oracle數(shù)據(jù)庫(kù)主要應(yīng)用于UNIX操作系統(tǒng),影響了它的廣泛應(yīng)用。在Oracle公司提供了基于Windows平臺(tái)的Oracle版本以后,Oracle數(shù)據(jù)庫(kù)在國(guó)內(nèi)外擁有了更為廣泛的應(yīng)用市場(chǎng)。近些年來(lái),隨著國(guó)內(nèi)中小企業(yè)對(duì)數(shù)據(jù)庫(kù)可靠性、安全性要求的提高,基于Windows平臺(tái)的Oracle數(shù)據(jù)庫(kù)服務(wù)器獲得了廣泛青睞。隨之而來(lái),對(duì)Oracle數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)的人員需求不斷增加,對(duì)其素質(zhì)要求不斷提高。本書(shū)的編寫(xiě)既考慮了Oracle數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)的初學(xué)者,同時(shí)也兼顧了有一定基礎(chǔ)的管理和開(kāi)發(fā)人員。凡是想學(xué)習(xí)SQL語(yǔ)句或利用PL/SQL提高Oracle數(shù)據(jù)庫(kù)管理和開(kāi)發(fā)能力的人士,都可以從本書(shū)中獲得借鑒。
本書(shū)分三個(gè)部分,共十二章。其中第一部分對(duì)Oracle 12c數(shù)據(jù)庫(kù)進(jìn)行了概述,第二部分用大量范例詳解了SQL語(yǔ)句,第三部分精選了可供借鑒的PL/SQL編程實(shí)例。
第一部分共三章。主要內(nèi)容包括:數(shù)據(jù)庫(kù)及Oracle 12c的產(chǎn)生與發(fā)展,數(shù)據(jù)庫(kù)分類,SQL 和PL/SQL簡(jiǎn)介,SQL和PL/SQL開(kāi)發(fā)環(huán)境簡(jiǎn)介,本書(shū)中使用的數(shù)據(jù)庫(kù)的建立。第一部分為全書(shū)做了必要的鋪墊,建立了書(shū)中使用的數(shù)據(jù)庫(kù),詳細(xì)地介紹了SQL語(yǔ)句和PL/SQL編程調(diào)試開(kāi)發(fā)環(huán)境。
第二部分共六章。主要內(nèi)容包括:數(shù)據(jù)查詢語(yǔ)句(SELECT-Query statements);數(shù)據(jù)操縱語(yǔ)言(DML-Data Manipulation Language),其中包括INSERT語(yǔ)句、UPDATE語(yǔ)句、DELETE語(yǔ)句;數(shù)據(jù)定義語(yǔ)言(DDL-Data Definition Language),其中包括CREATE語(yǔ)句、ALTER語(yǔ)句、DROP語(yǔ)句、RENAME語(yǔ)句、TRUNCATE語(yǔ)句;事務(wù)控制語(yǔ)句(TC-Transaction Control statements),其中包括COMMIT語(yǔ)句、ROLLBACK語(yǔ)句、SAVEPOINT語(yǔ)句;數(shù)據(jù)控制語(yǔ)言(DCL-Data Control Language),其中包括GRANT語(yǔ)句、REVOKE語(yǔ)句。
上述各種類型SQL語(yǔ)句的講述,均結(jié)合范例數(shù)據(jù)庫(kù)給出詳細(xì)的實(shí)例。
第三部分共三章。主要包括兩方面內(nèi)容,一是PL/SQL程序設(shè)計(jì)基礎(chǔ)知識(shí);二是PL/SQL高級(jí)編程特性。前者包括PL/SQL程序基本結(jié)構(gòu)(順序、分支、循環(huán)),以及游標(biāo)、異常處理等。后者包括復(fù)合數(shù)據(jù)類型,構(gòu)成PL/SQL程序的基本模塊(函數(shù)、過(guò)程、包),以及觸發(fā)器等。PL/SQL程序設(shè)計(jì)的講述,均結(jié)合范例數(shù)據(jù)庫(kù)給出詳細(xì)的實(shí)例。
在本書(shū)配套資源中,提供了本書(shū)范例程序的全部源代碼,讀者可登錄清華大學(xué)出版社官方網(wǎng)站查找到本書(shū)服務(wù)頁(yè)面進(jìn)行下載。
本書(shū)由唐山師范學(xué)院鄭錚編寫(xiě),并負(fù)責(zé)統(tǒng)稿。
由于編者水平有限,本書(shū)難免有不足之處,懇請(qǐng)廣大讀者批評(píng)指正!
編 者
鄭錚,唐山師范學(xué)院,副教授。長(zhǎng)期從事計(jì)算機(jī)、信息管理等相關(guān)專業(yè)的教學(xué)和科研工作。近年來(lái),主要承擔(dān)了數(shù)據(jù)庫(kù)原理、分布式數(shù)據(jù)庫(kù)、計(jì)算機(jī)網(wǎng)絡(luò)原理、計(jì)算機(jī)通信網(wǎng)、微機(jī)原理、信息系統(tǒng)開(kāi)發(fā)、數(shù)字電路、計(jì)算機(jī)科學(xué)導(dǎo)論、計(jì)算機(jī)文化基礎(chǔ)、Java程序設(shè)計(jì)、PowerBuilder程序設(shè)計(jì)、人工智能、計(jì)算機(jī)專業(yè)英語(yǔ)、多媒體設(shè)計(jì)與制作等多門(mén)本科生的教學(xué)任務(wù)。目前,主持唐山市科技局科技攻關(guān)項(xiàng)目一項(xiàng),作為主要參與者參加教育部、河北省教育廳、唐山市科技局項(xiàng)目3項(xiàng)。發(fā)表EI檢索論文20余篇,參與編寫(xiě)教材4部。
目 錄
第一部分 Oracle 12c概述
第1章 Oracle簡(jiǎn)介 3
1.1 數(shù)據(jù)庫(kù)的產(chǎn)生與發(fā)展 4
1.1.1 數(shù)據(jù)管理技術(shù)的產(chǎn)生與發(fā)展 4
1.1.2 數(shù)據(jù)庫(kù)技術(shù)的發(fā)展 6
1.1.3 關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品簡(jiǎn)介 8
1.2 Oracle的產(chǎn)生與發(fā)展 13
1.3 Oracle 12c簡(jiǎn)介 17
1.3.1 Oracle數(shù)據(jù)庫(kù)系統(tǒng)的特點(diǎn) 17
1.3.2 Oracle版本號(hào)的含義 18
1.3.3 Oracle 12c的新特性 18
第2章 數(shù)據(jù)庫(kù)的建立 21
2.1 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì) 22
2.1.1 關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ) 22
2.1.2 關(guān)系數(shù)據(jù)庫(kù)規(guī)范化 24
2.2 數(shù)據(jù)庫(kù)物理設(shè)計(jì) 26
2.3 數(shù)據(jù)庫(kù)實(shí)施 28
2.4 創(chuàng)建數(shù)據(jù)庫(kù) 29
2.4.1 數(shù)據(jù)庫(kù)創(chuàng)建前的準(zhǔn)備 29
2.4.2 安裝數(shù)據(jù)庫(kù)服務(wù)器并創(chuàng)建數(shù)據(jù)庫(kù) 30
第3章 SQL與PL/SQL概述 35
3.1 SQL與PL/SQL簡(jiǎn)介 36
3.1.1 SQL簡(jiǎn)介 36
3.1.2 PL/SQL簡(jiǎn)介 38
3.2 SQL*Plus 簡(jiǎn)介 40
3.3 范例數(shù)據(jù)庫(kù)表的建立 42
3.3.1 Oracle 12c基本數(shù)據(jù)類型 43
3.3.2 定義表的結(jié)構(gòu) 44
3.3.3 查看表的結(jié)構(gòu) 47
3.3.4 修改表的結(jié)構(gòu) 49
3.3.5 刪除表 49
3.3.6 添加數(shù)據(jù) 50
3.3.7 查看數(shù)據(jù) 52
3.3.8 刪除數(shù)據(jù) 54
第二部分 SQL操作
第4章 單表查詢 59
4.1 簡(jiǎn)單查詢 60
4.1.1 查詢指定列 60
4.1.2 改變輸出 63
4.1.3 空值處理 67
4.2 條件查詢 69
4.2.1 單一條件查詢 70
4.2.2 復(fù)合條件查詢 73
4.3 記錄排序 77
4.3.1 按單一列排序 78
4.3.2 按多列排序 80
4.4 分組查詢 81
4.4.1 列函數(shù)及其應(yīng)用 81
4.4.2 GROUP BY子句 83
4.4.3 HAVING子句 85
第5章 子查詢與集合操作 87
5.1 子查詢 88
5.1.1 單行子查詢 88
5.1.2 多行子查詢 89
5.1.3 多列子查詢 91
5.1.4 相關(guān)子查詢 92
5.1.5 嵌套子查詢 94
5.2 集合操作 94
5.2.1 集合操作符 95
5.2.2 集合操作的進(jìn)一步討論 101
第6章 連接查詢 107
6.1 內(nèi)連接查詢 108
6.1.1 簡(jiǎn)單內(nèi)連接 108
6.1.2 復(fù)雜內(nèi)連接 110
6.2 外連接查詢 111
6.2.1 左外連接 112
6.2.2 右外連接 113
6.2.3 全外連接 114
6.3 其他特殊連接 116
6.3.1 交叉連接 116
6.3.2 自連接 118
第7章 數(shù)據(jù)操縱語(yǔ)言與事務(wù)處理 121
7.1 數(shù)據(jù)操縱語(yǔ)言 122
7.1.1 插入數(shù)據(jù)(INSERT) 122
7.1.2 更新數(shù)據(jù)(UPDATE) 123
7.1.3 刪除數(shù)據(jù)(DELETE、TRUNCATE TABLE) 125
7.1.4 數(shù)據(jù)庫(kù)完整性 126
7.1.5 含有子查詢的DML語(yǔ)句 128
7.2 數(shù)據(jù)事務(wù)處理 130
7.2.1 顯式處理事務(wù) 130
7.2.2 隱式處理事務(wù) 132
7.2.3 特殊事務(wù) 133
第8章 SQL函數(shù) 135
8.1 數(shù)字函數(shù) 136
8.1.1 數(shù)字函數(shù)概述 136
8.1.2 數(shù)字函數(shù)示例 136
8.2 字符函數(shù) 142
8.2.1 字符函數(shù)概述 142
8.2.2 字符函數(shù)示例 143
8.3 日期時(shí)間函數(shù) 146
8.3.1 日期時(shí)間函數(shù)概述 147
8.3.2 日期時(shí)間函數(shù)示例 147
8.4 轉(zhuǎn)換函數(shù) 150
8.4.1 轉(zhuǎn)換函數(shù)概述 150
8.4.2 轉(zhuǎn)換函數(shù)示例 151
第9章 數(shù)據(jù)控制語(yǔ)言與數(shù)據(jù)定義語(yǔ)言 155
9.1 數(shù)據(jù)控制語(yǔ)言 156
9.1.1 數(shù)據(jù)庫(kù)權(quán)限 156
9.1.2 權(quán)限控制 159
9.2 表 164
9.2.1 建立表 164
9.2.2 獲得表的相關(guān)信息 168
9.2.3 修改表定義 169
9.2.4 修改表名 175
9.2.5 刪除表 176
9.3 索引 176
9.3.1 建立索引 176
9.3.2 獲得索引信息 177
9.3.3 修改索引名字 178
9.3.4 刪除索引 178
9.4 視圖 178
9.4.1 建立視圖 179
9.4.2 使用視圖 180
9.4.3 獲得視圖定義信息 183
9.4.4 修改視圖 184
9.4.5 刪除視圖 184
第三部分 PL/SQL編程指南
第10章 PL/SQL編程基礎(chǔ) 187
10.1 PL/SQL語(yǔ)言基礎(chǔ) 188
10.1.1 PL/SQL塊簡(jiǎn)介 188
10.1.2 PL/SQL基本語(yǔ)法要素 190
10.1.3 變量及其數(shù)據(jù)類型 193
10.2 在PL/SQL中執(zhí)行SQL語(yǔ)句 197
10.2.1 執(zhí)行SELECT語(yǔ)句 197
10.2.2 執(zhí)行DML語(yǔ)句 199
10.2.3 執(zhí)行事務(wù)處理語(yǔ)句 204
10.3 PL/SQL程序控制結(jié)構(gòu) 205
10.3.1 順序結(jié)構(gòu) 205
10.3.2 分支結(jié)構(gòu) 206
10.3.3 循環(huán)結(jié)構(gòu) 211
10.3.4 GOTO語(yǔ)句與NULL語(yǔ)句 214
10.4 異常處理 216
10.4.1 異常的基本概念 216
10.4.2 系統(tǒng)異常處理 219
10.4.3 自定義異常處理 222
10.4.4 使用異常函數(shù) 224
10.5 游標(biāo) 225
10.5.1 游標(biāo)應(yīng)用基礎(chǔ) 225
10.5.2 游標(biāo)應(yīng)用 227
10.5.3 游標(biāo)FOR循環(huán) 230
10.5.4 游標(biāo)的復(fù)雜應(yīng)用 232
第11章 復(fù)合數(shù)據(jù)類型 239
11.1 記錄類型 240
11.1.1 定義記錄 240
11.1.2 在SELECT語(yǔ)句中使用記錄 241
11.1.3 在DML中使用記錄 244
11.2 記錄表類型 248
11.2.1 定義記錄表 248
11.2.2 使用記錄表 249
11.3 聯(lián)合數(shù)組類型 251
11.3.1 定義聯(lián)合數(shù)組 251
11.3.2 使用聯(lián)合數(shù)組 251
11.4 嵌套表類型 253
11.4.1 定義嵌套表 254
11.4.2 使用嵌套表 254
11.5 變長(zhǎng)數(shù)組類型 257
11.5.1 定義變長(zhǎng)數(shù)組 257
11.5.2 使用變長(zhǎng)數(shù)組類型 258
11.6 集合操作 261
11.6.1 集合屬性與方法 261
11.6.2 使用集合操作符 268
第12章 應(yīng)用程序結(jié)構(gòu) 275
12.1 子程序 276
12.1.1 過(guò)程 276
12.1.2 函數(shù) 286
12.2 包 293
12.2.1 定義包 294
12.2.2 包的管理 295
12.2.3 調(diào)用包 298
12.2.4 包中子程序的重載 299
12.3 觸發(fā)器 301
12.3.1 概述 301
12.3.2 DML觸發(fā)器 305
12.3.3 INSTEAD OF觸發(fā)器 308
12.3.4 系統(tǒng)事件觸發(fā)器 310
參考文獻(xiàn) 312