SQL(Structured Query Language)是關(guān)系數(shù)據(jù)庫的基本操作語言,它主要包括數(shù)據(jù)查詢(Query statements)、數(shù)據(jù)操縱(Data Manipulation Language statements)、數(shù)據(jù)定義(Data Definition Language statements)等功能,是應(yīng)用程序與數(shù)據(jù)庫進行交互操作的接口。PL/SQL(Procedural Language/SQL)是Oracle特有的編程語言,它可以像其他高級編程語言一樣,編寫出各種完成數(shù)據(jù)庫操作功能的程序。由于PL/SQL由Oracle系統(tǒng)本身編譯執(zhí)行,所以程序的運行效率更高。
《Oracle 12c SQL和PL/SQL編程指南》為Oracle數(shù)據(jù)庫應(yīng)用開發(fā)人員提供了SQL使用指南和PL/SQL編程技術(shù)。通過學(xué)習(xí)本書,讀者不僅可以掌握SQL和PL/SQL的基礎(chǔ)知識,而且可以掌握Oracle 12c SQL和PL/SQL的許多高級特征。
《Oracle 12c SQL和PL/SQL編程指南》既可作為高等院校計算機相關(guān)專業(yè)的輔助教材,也可作為各類高級數(shù)據(jù)庫編程人員的參考書。本書的編寫既考慮了SQL和PL/SQL的初學(xué)者,同時也兼顧了有經(jīng)驗的PL/SQL編程人員,本書還可以作為Oracle 12c培訓(xùn)班的教材。
隨著Oracle公司提供了基于Windows平臺的Oracle版本以后,Oracle數(shù)據(jù)庫在國內(nèi)外擁有更為廣泛的應(yīng)用市場。近些年來,隨著國內(nèi)中小企業(yè)對數(shù)據(jù)庫可靠性、安全性要求的提高,基于Windows平臺的Oracle數(shù)據(jù)庫服務(wù)器獲得了廣泛青睞!禣racle 12c SQL和PL/SQL編程指南》在編寫時,既考慮了Oracle數(shù)據(jù)庫管理和開發(fā)的初學(xué)者,也兼顧到了有一定基礎(chǔ)的管理和開發(fā)人員。同時,對那些想學(xué)習(xí)SQL語句或利用PL/SQL提高Oracle數(shù)據(jù)庫管理和開發(fā)能力的人士,也可以起到一定的借鑒作用。
前 言
Oracle公司是世界排名前列的國際大型企業(yè)。Oracle數(shù)據(jù)庫是世界領(lǐng)先、性能優(yōu)異的大型數(shù)據(jù)庫管理系統(tǒng)。Oracle數(shù)據(jù)庫廣泛地應(yīng)用在金融、通信、航空等領(lǐng)域。雖然有多種數(shù)據(jù)庫管理系統(tǒng)可供用戶選擇,但Oracle數(shù)據(jù)庫以其處理的并發(fā)數(shù)據(jù)量極大,極高的可靠性、安全性和可擴展性贏得了廣大高端用戶的青睞。早期Oracle數(shù)據(jù)庫主要應(yīng)用于UNIX操作系統(tǒng),影響了它的廣泛應(yīng)用。在Oracle公司提供了基于Windows平臺的Oracle版本以后,Oracle數(shù)據(jù)庫在國內(nèi)外擁有了更為廣泛的應(yīng)用市場。近些年來,隨著國內(nèi)中小企業(yè)對數(shù)據(jù)庫可靠性、安全性要求的提高,基于Windows平臺的Oracle數(shù)據(jù)庫服務(wù)器獲得了廣泛青睞。隨之而來,對Oracle數(shù)據(jù)庫管理和開發(fā)的人員需求不斷增加,對其素質(zhì)要求不斷提高。本書的編寫既考慮了Oracle數(shù)據(jù)庫管理和開發(fā)的初學(xué)者,同時也兼顧了有一定基礎(chǔ)的管理和開發(fā)人員。凡是想學(xué)習(xí)SQL語句或利用PL/SQL提高Oracle數(shù)據(jù)庫管理和開發(fā)能力的人士,都可以從本書中獲得借鑒。
本書分三個部分,共十二章。其中第一部分對Oracle 12c數(shù)據(jù)庫進行了概述,第二部分用大量范例詳解了SQL語句,第三部分精選了可供借鑒的PL/SQL編程實例。
第一部分共三章。主要內(nèi)容包括:數(shù)據(jù)庫及Oracle 12c的產(chǎn)生與發(fā)展,數(shù)據(jù)庫分類,SQL 和PL/SQL簡介,SQL和PL/SQL開發(fā)環(huán)境簡介,本書中使用的數(shù)據(jù)庫的建立。第一部分為全書做了必要的鋪墊,建立了書中使用的數(shù)據(jù)庫,詳細地介紹了SQL語句和PL/SQL編程調(diào)試開發(fā)環(huán)境。
第二部分共六章。主要內(nèi)容包括:數(shù)據(jù)查詢語句(SELECT-Query statements);數(shù)據(jù)操縱語言(DML-Data Manipulation Language),其中包括INSERT語句、UPDATE語句、DELETE語句;數(shù)據(jù)定義語言(DDL-Data Definition Language),其中包括CREATE語句、ALTER語句、DROP語句、RENAME語句、TRUNCATE語句;事務(wù)控制語句(TC-Transaction Control statements),其中包括COMMIT語句、ROLLBACK語句、SAVEPOINT語句;數(shù)據(jù)控制語言(DCL-Data Control Language),其中包括GRANT語句、REVOKE語句。
上述各種類型SQL語句的講述,均結(jié)合范例數(shù)據(jù)庫給出詳細的實例。
第三部分共三章。主要包括兩方面內(nèi)容,一是PL/SQL程序設(shè)計基礎(chǔ)知識;二是PL/SQL高級編程特性。前者包括PL/SQL程序基本結(jié)構(gòu)(順序、分支、循環(huán)),以及游標、異常處理等。后者包括復(fù)合數(shù)據(jù)類型,構(gòu)成PL/SQL程序的基本模塊(函數(shù)、過程、包),以及觸發(fā)器等。PL/SQL程序設(shè)計的講述,均結(jié)合范例數(shù)據(jù)庫給出詳細的實例。
在本書配套資源中,提供了本書范例程序的全部源代碼,讀者可登錄清華大學(xué)出版社官方網(wǎng)站查找到本書服務(wù)頁面進行下載。
本書由唐山師范學(xué)院鄭錚編寫,并負責統(tǒng)稿。
由于編者水平有限,本書難免有不足之處,懇請廣大讀者批評指正!
編 者
鄭錚,唐山師范學(xué)院,副教授。長期從事計算機、信息管理等相關(guān)專業(yè)的教學(xué)和科研工作。近年來,主要承擔了數(shù)據(jù)庫原理、分布式數(shù)據(jù)庫、計算機網(wǎng)絡(luò)原理、計算機通信網(wǎng)、微機原理、信息系統(tǒng)開發(fā)、數(shù)字電路、計算機科學(xué)導(dǎo)論、計算機文化基礎(chǔ)、Java程序設(shè)計、PowerBuilder程序設(shè)計、人工智能、計算機專業(yè)英語、多媒體設(shè)計與制作等多門本科生的教學(xué)任務(wù)。目前,主持唐山市科技局科技攻關(guān)項目一項,作為主要參與者參加教育部、河北省教育廳、唐山市科技局項目3項。發(fā)表EI檢索論文20余篇,參與編寫教材4部。
目 錄
第一部分 Oracle 12c概述
第1章 Oracle簡介 3
1.1 數(shù)據(jù)庫的產(chǎn)生與發(fā)展 4
1.1.1 數(shù)據(jù)管理技術(shù)的產(chǎn)生與發(fā)展 4
1.1.2 數(shù)據(jù)庫技術(shù)的發(fā)展 6
1.1.3 關(guān)系數(shù)據(jù)庫產(chǎn)品簡介 8
1.2 Oracle的產(chǎn)生與發(fā)展 13
1.3 Oracle 12c簡介 17
1.3.1 Oracle數(shù)據(jù)庫系統(tǒng)的特點 17
1.3.2 Oracle版本號的含義 18
1.3.3 Oracle 12c的新特性 18
第2章 數(shù)據(jù)庫的建立 21
2.1 數(shù)據(jù)庫邏輯設(shè)計 22
2.1.1 關(guān)系數(shù)據(jù)庫設(shè)計基礎(chǔ) 22
2.1.2 關(guān)系數(shù)據(jù)庫規(guī)范化 24
2.2 數(shù)據(jù)庫物理設(shè)計 26
2.3 數(shù)據(jù)庫實施 28
2.4 創(chuàng)建數(shù)據(jù)庫 29
2.4.1 數(shù)據(jù)庫創(chuàng)建前的準備 29
2.4.2 安裝數(shù)據(jù)庫服務(wù)器并創(chuàng)建數(shù)據(jù)庫 30
第3章 SQL與PL/SQL概述 35
3.1 SQL與PL/SQL簡介 36
3.1.1 SQL簡介 36
3.1.2 PL/SQL簡介 38
3.2 SQL*Plus 簡介 40
3.3 范例數(shù)據(jù)庫表的建立 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 簡單查詢 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 集合操作的進一步討論 101
第6章 連接查詢 107
6.1 內(nèi)連接查詢 108
6.1.1 簡單內(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ù)操縱語言與事務(wù)處理 121
7.1 數(shù)據(jù)操縱語言 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ù)庫完整性 126
7.1.5 含有子查詢的DML語句 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ù) 146
8.3.1 日期時間函數(shù)概述 147
8.3.2 日期時間函數(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ù)控制語言與數(shù)據(jù)定義語言 155
9.1 數(shù)據(jù)控制語言 156
9.1.1 數(shù)據(jù)庫權(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語言基礎(chǔ) 188
10.1.1 PL/SQL塊簡介 188
10.1.2 PL/SQL基本語法要素 190
10.1.3 變量及其數(shù)據(jù)類型 193
10.2 在PL/SQL中執(zhí)行SQL語句 197
10.2.1 執(zhí)行SELECT語句 197
10.2.2 執(zhí)行DML語句 199
10.2.3 執(zhí)行事務(wù)處理語句 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語句與NULL語句 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 游標 225
10.5.1 游標應(yīng)用基礎(chǔ) 225
10.5.2 游標應(yīng)用 227
10.5.3 游標FOR循環(huán) 230
10.5.4 游標的復(fù)雜應(yīng)用 232
第11章 復(fù)合數(shù)據(jù)類型 239
11.1 記錄類型 240
11.1.1 定義記錄 240
11.1.2 在SELECT語句中使用記錄 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 變長數(shù)組類型 257
11.5.1 定義變長數(shù)組 257
11.5.2 使用變長數(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 過程 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
參考文獻 312