內容簡介
Oracle PL/SQL寶典(第2版)作者結合多年的Oracle開發經驗和心得體會,花費了一年多的時間寫作本書,希望各位讀者能在本書的引領下學習PL/SQL語言。本書全面、系統、深入地介紹了PL/SQL語言的開發技術,並以大量實例貫穿於全書的講解之中,還詳細介紹了如何對資料庫進行管理、備份與恢復以及性能最佳化,最後講解了Oracle的套用系統項目案例。學習完本書後,讀者應該可以更加全面地掌握PL/SQL語言。
目錄
第1篇 PL/SQL簡介
第1章 走進Oracle 2
1.1 資料庫系統與數據模型 2
1.1.1 基本術語 2
1.1.2 資料庫技術的發展 3
1.1.3 數據模型 5
1.2 資料庫系統的體系結構 6
1.2.1 資料庫系統的三級模式 6
1.2.2 資料庫管理系統 7
1.2.3 資料庫系統的工作流程 8
1.3 關係資料庫的簡單介紹 9
1.3.1 關係資料庫的基本特性 10
1.3.2 關係資料庫的設計規範 10
1.4 認識Oracle 11g R2 11
1.4.1 什麼是Oracle 11g R2 11
1.4.2 Oracle的發展歷程 12
1.4.3 Oracle 11g R2的新特性 13
1.5 小結 13
第2章 認識PL/SQL 14
2.1 SQL語言概述 14
2.2 什麼是PL/SQL 19
2.3 PL/SQL在SQL*Plus中的使用 26
2.3.5 SQL*Plus刪除命令 31
2.3.6 SQL*Plus清除緩衝區命令 32
2.3.7 SQL*Plus顯示緩衝區內容命令 33
2.3.8 SQL*Plus保存命令 34
2.3.9 查詢結果的格式化 36
2.3.10 注釋的使用 43
2.3.11 在SQL*Plus中編輯語句 44
2.4 PL/SQL在SQL Developer中的使用 45
2.5 小結 47
第2篇 PL/SQL基礎
第3章 數據表的基本操作 50
3.1 創建表 50
3.1.3 創建表實例 52
3.2 約束 54
3.2.1 約束的類型 55
3.2.2 創建一個帶檢查約束的表 55
3.2.3 創建一個帶非空約束的表 56
3.2.4 創建一個帶唯一約束的表 57
3.2.5 創建一個帶外鍵約束的表 58
3.2.6 創建一個含多個約束的表 61
3.3 修改表 62
3.3.2 給表添加約束 65
3.3.3 刪除表中的約束 66
3.4 刪除表 67
3.5 重命名表 67
3.6 使用企業管理器操作表 67
3.6.1 啟用企業管理器 68
3.6.2 使用企業管理器創建表 69
3.6.4 使用企業管理器刪除表 74
3.7 小結 75
第4章 表中數據的基本操作 76
4.1 查詢數據表 76
4.1.1 查詢表中的數據 76
4.1.2 使用SQL Developer工具查詢表中的數據 77
4.2 添加數據 79
4.2.1 添加操作的基本語法 79
4.2.2 直接向表中添加數據 80
4.2.3 數據中NULL值的處理 82
4.2.4 插入值是默認值的處理 84
4.2.5 插入值是唯一值的處理 85
4.2.6 使用INSERT...SELECT插入數據 86
4.2.7 使用SQL Developer工具添加數據 87
4.3 修改數據 88
4.3.1 修改操作的基本語法 88
4.3.2 使用UPDATE語句更新數據行 89
4.3.3 根據條件修改表中的數據 91
4.3.4 使用SQL Developer工具修改數據 91
4.4 刪除數據 91
4.4.1 刪除操作的基本語法 91
4.4.2 刪除表中的數據 92
4.4.3 有關TRUNCATE的使用 92
4.4.4 使用SQL Developer工具刪除數據 94
4.5 小結 94
第5章 數據的基本查詢 95
5.1 查詢語句的基礎 95
5.1.1 查詢語句語法 95
5.1.2 查詢各關鍵字的順序及功能 96
5.1.3 查詢語句執行順序 96
5.2 最容易理解的查詢 97
5.2.1 增加實驗數據 97
5.2.2 查詢表中列的數據 99
5.2.3 查詢所有列 101
5.2.4 去除查詢結果中的重複記錄 102
5.2.5 返回查詢的部分數據 104
5.3 帶條件的查詢 104
5.3.1 單一的條件查詢 105
5.3.2 查詢中使用比較表達式 106
5.3.3 使用簡單邏輯表達式 108
5.3.4 有關NULL值的判斷 114
5.3.5 有關模糊查詢 115
5.3.6 指定數據範圍 120
5.3.7 如何限制檢索數據範圍 122
5.3.8 定義轉義符 123
5.4 排序查詢結果 125
5.4.1 基本排序 125
5.4.2 多列排序 129
5.5 PL/SQL中的運算符 131
5.5.1 算術運算符 132
5.5.2 比較運算符 132
5.5.3 邏輯運算符 132
5.5.4 字元串連線符 133
5.5.5 賦值運算符 133
5.5.6 運算符的優先權 133
5.6 查詢中表達式的使用 134
5.6.1 使用連線符連線列 134
5.6.2 算術表達式的使用 136
5.7 小結 137
第6章 查詢中函式的使用 138
6.1 常用的單行函式 138
6.1.1 字元處理函式 138
6.1.2 數值處理函式 143
6.1.3 日期處理函式 146
6.1.4 轉換函式 149
6.1.5 替換NULL值函式 151
6.1.6 排除指定條件函式 152
6.2 聚合函式 152
6.2.1 聚合函式的種類 152
6.2.2 計數函式 153
6.2.3 求和函式 155
6.2.4 均值函式 156
6.2.5 最大值/最小值函式 158
6.2.6 統計函式 160
6.2.7 聚合函式的重值處理 161
6.3 分組查詢 162
6.3.1 簡單分組 162
6.3.2 多列分組 163
6.3.3 分組查詢中NULL值的處理 164
6.3.4 匯總數據運算符 165
6.3.5 篩選分組結果 168
6.4 其他函式 170
6.4.1 返回登錄名函式 170
6.4.2 返回SESSIONID和
LANGUAGE函式 170
6.4.3 數據匹配函式 171
6.5 小結 172
第7章 查詢中特殊的轉換函式 173
7.1 基本的轉換函式 173
7.1.1 數據類型的自動轉換 173
7.1.2 關於自動轉換的注意事項 176
7.2 特殊的轉換函式 177
7.3 變換函式 178
7.3.1 TRANSLATE函式 178
7.3.2 DECODE函式 180
7.4 小結 182
第8章 數據表的高級查詢 183
8.1 理解什麼是多表連線 183
8.1.1 什麼是連線 183
8.1.2 連線的類型與實現 184
8.2 簡單的多表查詢 184
8.2.1 創建實例表 185
8.2.2 如何實現多表查詢 186
8.2.3 指定連線條件 187
8.2.4 使用別名作為表名的簡寫 188
8.2.5 自連線表進行查詢 189
8.3 表的連線查詢 192
8.3.1 基本連線語法 193
8.3.2 內部連線 193
8.3.3 自然連線 196
8.3.4 外部連線 198
8.3.5 交叉連線 203
8.3.6 連線中空值問題 204
8.3.7 表的連線與聚合分析 206
8.4 集合運算 208
8.4.1 集合運算的種類 208
8.4.2 UNION的使用 208
8.4.3 有關多表的UNION操作 211
8.4.4 UNION與JOIN的區別 212
8.4.5 MINUS與INTERSECT的使用 213
8.5 子查詢的使用 217
8.5.1 認識子查詢 217
8.5.2 非相關子查詢與相關子查詢 217
8.5.3 子查詢的組成 219
8.5.4 子查詢的使用方式及限制 220
8.6 在子查詢中使用各種限制條件 220
8.6.1 比較運算符引入子查詢 221
8.6.2 子查詢中的聚合函式 223
8.6.3 在子查詢中使用IN 224
8.7 在子查詢中使用EXISTS 227
8.7.1 使用EXISTS的子查詢 228
8.7.2 EXISTS子查詢的使用 229
8.7.3 使用EXISTS子查詢檢查表中的重複行 230
8.8 子查詢的其他套用 231
8.8.1 在子查詢中使用ROWNUM關鍵字 231
8.8.2 在SELECT子句中使用子查詢 234
8.8.3 在HAVING子句中使用子查詢 235
8.8.4 在數據操縱語言(DML)中使用子查詢 236
8.9 小結 238
第3篇 PL/SQL高級技術
第9章 索引和視圖的使用 240
9.1 索引及其操作 240
9.1.1 什麼是索引 240
9.1.2 索引的種類及語法 240
9.1.3 索引的創建 241
9.1.4 創建索引的注意事項 246
9.1.5 索引的管理 246
9.2 視圖及其套用 250
9.2.1 什麼是視圖 250
9.2.2 視圖的作用 251
9.3 創建視圖 251
9.3.1 視圖的語法 251
9.3.2 創建單表視圖 252
9.3.3 創建多表視圖 253
9.3.4 視圖的視圖 254
9.3.5 無源表視圖 255
9.3.6 設定視圖唯讀 255
9.3.7 設定視圖的檢查約束 257
9.3.8 內嵌視圖的使用 259
9.3.9 查詢視圖的定義和相關信息 259
9.4 修改、刪除視圖 260
9.4.1 修改視圖內容 260
9.4.2 刪除視圖 261
9.5 小結 262
第10章 序列 263
10.1 創建序列 263
10.2 使用序列 265
10.3 序列屬性 269
10.3.1 創建序列的注意事項 269
10.3.2 指定序列的初始值 269
10.3.3 序列的最大值和最小值 270
10.3.4 序列的步長 271
10.3.5 序列的循環取值 272
10.3.6 序列的快取大小 273
10.4 小結 274
第11章 數據類型、流程控制和游標 275
11.1 PL/SQL數據類型 275
11.1.1 標量類型 275
11.1.2 複合類型 276
11.2 變數和常量 284
11.2.1 變數的聲明語法 284
11.2.2 常量的聲明語法 285
11.3 程式流控制語句 285
11.3.1 IF...ELSE條件選擇結構 286
11.3.2 CASE條件控制語句 291
11.3.3 LOOP循環控制語句 295
11.4 游標 300
11.4.1 游標的概念 301
11.4.2 顯式游標的定義和操作 302
11.4.3 顯式游標的屬性 306
11.4.4 隱式游標 308
11.5 小結 311
第12章 存儲過程、函式 312
12.1 理解存儲過程 312
12.1.1 認識存儲過程 312
12.1.2 存儲過程的優點 312
12.1.3 存儲過程的語法 313
12.2 存儲過程的創建和執行 313
12.2.1 存儲過程的執行 313
12.2.2 創建無參數的存儲過程 314
12.2.3 帶有輸入參數的存儲過程 318
12.2.4 帶有輸出參數的存儲過程 321
12.3 存儲過程的管理 323
12.3.1 查看存儲過程 323
12.3.2 查看存儲過程的錯誤 324
12.3.3 修改存儲過程 326
12.3.4 存儲過程的重新編譯 326
12.3.5 刪除存儲過程 327
12.4 函式 327
12.4.1 函式的組成和語法 327
12.4.2 創建無參數函式 328
12.4.3 創建有參數函式 330
12.4.4 查看函式 335
12.4.5 修改函式 336
12.4.6 重新編譯函式 337
12.4.7 刪除函式 338
12.5 小結 338
第13章 程式包 339
13.1 程式包簡介 339
13.2 構建程式包的規則 339
13.2.1 程式包規範 339
13.2.2 程式包主體 341
13.3 調用程式包中的函式/存儲過程 343
13.4 刪除程式包 343
13.5 小結 344
第14章 觸發器 345
14.1 觸發器的基本概念 345
14.1.1 觸發器簡介 345
14.1.2 觸發器的類型 345
14.1.3 觸發器的作用及使用 346
14.1.4 觸發器的執行環境 346
14.2 觸發器的創建和使用 347
14.2.1 觸發器的語法和組成 347
14.2.2 創建DML觸發器 349
14.2.3 替代類型觸發器 360
14.2.4 複合類型觸發器 362
14.2.5 DDL類型觸發器 364
14.3 觸發器管理 366
14.3.1 查看觸發器 366
14.3.2 修改觸發器 367
14.3.3 刪除觸發器 369
14.4 小結 370
第15章 異常處理 371
15.1 理解異常 371
15.1.1 異常的分類 371
15.1.2 異常的結構 372
15.2 異常的套用 372
15.2.1 預定義異常 373
15.2.2 非預定義異常 377
15.2.3 自定義異常 379
15.3 小結 380
第16章 事務和鎖 381
16.1 事務控制的基本概念 381
16.1.1 事務控制的必要性 381
16.1.2 事務的ACID特性及實現 382
16.1.3 事務的狀態 382
16.1.4 PL/SQL中事務的執行 383
16.2 PL/SQL中事務的實現 384
16.2.1 事務的類型 384
16.2.2 提交事務 385
16.2.3 設定事務的保存點 387
16.3 並發控制及其實現 388
16.3.1 並發訪問的常見問題 389
16.3.2 什麼是鎖 390
16.3.3 鎖的分類 390
16.3.4 事務隔離級別 392
16.3.5 事務阻塞及其解決方法 394
16.3.6 死鎖 396
16.4 小結 398
第17章 安全管理 399
17.1 用戶管理 399
17.1.1 什麼是用戶 399
17.1.2 創建用戶 399
17.1.3 修改用戶 405
17.1.4 刪除用戶 407
17.2 許可權管理 409
17.2.1 授予許可權 409
17.2.2 許可權回收 413
17.2.3 查看許可權 415
17.3 角色管理 416
17.3.1 理解角色 416
17.3.2 創建角色 417
17.3.3 角色的管理設定 419
17.3.4 修改、刪除角色 420
17.4 概要檔案(PROFILE) 421
17.4.1 理解概要檔案 421
17.4.2 創建概要檔案 421
17.4.3 修改、刪除概要檔案 424
17.4.4 查詢概要檔案 425
17.5 小結 426
第18章 動態SQL和動態PL/SQL 427
18.1 動態SQL 427
18.1.1 EXECUTE IMMEDIATE語句 427
18.1.2 OPEN FOR語句 428
18.1.3 4種動態SQL方法 429
18.2 動態PL/SQL 431
18.3 小結 431
第19章 管理PL/SQL代碼 432
19.1 管理資料庫中的代碼 432
19.1.1 數據字典視圖概述 432
19.1.2 顯示存儲對象的信息 433
19.1.3 原始碼的顯示和搜尋 434
19.1.4 通過數據字典視圖查看編譯器屬性 434
19.1.5 通過視圖分析和更改觸發器的狀態 436
19.1.6 分析參數信息 437
19.2 依賴關係的管理和代碼的重編譯 437
19.2.1 通過數據字典視圖查看依賴關係 437
19.2.2 失效的程式單元的重編譯 438
19.3 編譯時警告 439
19.4 PL/SQL程式的執行和調試 441
19.4.1 PL/SQL程式的執行 441
19.4.2 PL/SQL程式的調試 442
19.4.3 調試技巧和策略 442
19.5 I/O操作與PL/SQL 446
19.5.1 顯示信息 446
19.5.2 啟用DBMS_OUTPUT 446
19.6 套用安全與PL/SQL 448
19.7 小結 449
第20章 PL/SQL語句最佳化 450
20.1 一般的SQL技巧 450
20.1.1 在查詢中儘量不使用“*” 450
20.1.2 多表查詢時多使用別名 450
20.1.3 條件查詢多使用WHERE 451
20.1.4 計算時不用索引列 451
20.1.5 指定查詢範圍時多使用IN 452
20.1.6 使用TRUNCATE清空表中記錄 453
20.1.7 及時提交事務 453
20.1.8 DECODE函式的使用 454
20.1.9 多使用EXISTS語句判斷條件 455
20.1.10 其他技巧 455
20.2 Oracle最佳化器 456
20.2.1 Oracle最佳化器的分類 456
20.2.2 Oracle最佳化器的模式 457
20.2.3 查看Oracle執行計畫 457
20.3 SQL性能指導 458
20.3.1 ADDM 458
20.3.2 SQL訪問指導 458
20.3.3 SQL最佳化指導 462
20.4 小結 462
第21章 備份與恢復 463
21.1 備份與恢復簡介 463
21.1.1 備份 463
21.1.2 恢復 463
21.2 邏輯備份與恢復 463
21.2.1 使用expdp和impdp工具進行邏輯備份與恢復 463
21.2.2 使用OEM進行邏輯備份與恢復 466
21.3 脫機備份與恢復 475
21.3.1 脫機備份 475
21.3.2 脫機恢復 476
21.4 在線上備份與恢復 476
21.4.1 使用RMAN管理備份與恢復 477
21.4.2 恢復 479
21.5 小結 482
第4篇 Oracle套用開發
第22章 在.NET中連線Oracle資料庫 484
22.1 ADO.NET概述 484
22.1.1 什麼是ADO.NET 484
22.1.2 ADO.NET中的對象 484
22.2 使用綁定的方式連線Oracle資料庫 485
22.2.1 數據控制項概述 485
22.2.2 使用DataGridView控制項綁定Oracle資料庫 486
22.3 使用代碼的方式連線Oracle資料庫 492
22.3.1 使用Command對象操作Oracle資料庫 492
22.3.2 使用DataSet對象存儲查詢結果 494
22.3.3 商品信息存儲實例 495
22.4 小結 499
第23章 在Java中連線Oracle資料庫 500
23.1 JDBC與ODBC簡介 500
23.1.1 什麼是JDBC 500
23.1.2 什麼是ODBC 501
23.2 使用Thin方式連線Oracle資料庫 502
23.3 使用JDBC-ODBC橋連線Oracle資料庫 510
23.3.1 配置ODBC數據源 510
23.3.2 連線Oracle資料庫 513
23.4 小結 513
前言
Oracle 11g R2是一款優秀的關係型資料庫,廣泛地套用在各行各業中。Oracle資料庫產品具有較好的安全性、穩定性和優異的性能,占領了資料庫市場的大部分份額。要使用Oracle設計應用程式,就要學習Oracle自己的語言——PL/SQL語言。PL/SQL語言不僅能在Oracle內部使用,還能在自己的應用程式中使用。多種Oracle操作工具如SQL Developer、SQL*Plus中都可以使用PL/SQL語言。尤其是在編寫應用程式時如果使用Oracle資料庫,則學習PL/SQL更是至關重要的。
本書特色
1.涵蓋PL/SQL編程的各種語法
本書涵蓋了使用PL/SQL建表、操作表中的數據、PL/SQL的流程控制語句、存儲過程和函式、觸發器、游標、用戶管理等PL/SQL編程語法的講解。
2.示例驅動,學習性強
本書每章都提供了大量的示例,在完成這些示例的同時讀者也能更快地學習和掌握PL/SQL語言的使用。此外,這些示例全部在真實環境中演練過並截取效果圖,使讀者學習起來很方便。
3.講解由淺入深,循序漸進,適合各個層次的讀者閱讀
本書從PL/SQL的基礎開始講解,逐步深入到PL/SQL的高級開發技術及套用,內容梯度從易到難,講解由淺入深,循序漸進,適合各個層次的讀者閱讀,並均有所獲。
4.詳解典型項目案例開發,提高實戰水平
本書詳細介紹了在.NET中連線Oracle和在Java中連線Oracle項目案例的開發。通過這兩個項目案例,可以讓讀者理解在案例開發中如何連線資料庫。
本書內容及體系結構
第1篇 PL/SQL簡介(第1~2章)
本篇主要內容包括:走進Oracle、認識PL/SQL等。通過本篇的學習,讀者可以掌握Oracle開發環境和PL/SQL語言的入門知識。
第2篇 PL/SQL基礎(第3~8章)
本篇主要內容包括:數據表的創建和操作、表中數據的操作、數據的基本查詢、查詢中函式的使用、查詢中特殊的轉換函式、數據表的高級查詢等內容。通過本篇的學習,讀者可以掌握使用PL/SQL語句查詢數據表中的數據,添加、刪除、修改數據等內容,以及相關的函式。
第3篇 PL/SQL高級技術(第9~21章)
本篇主要內容包括:索引和視圖的使用、序列的使用、數據類型和流程控制、游標的使用、存儲過程和函式的使用、觸發器的使用、在使用PL/SQL編程時異常的處理、事務和鎖、安全管理、PL/SQL代碼的管理以及PL/SQL語句最佳化、備份和恢復訪問技術等。通過本篇的學習,讀者可以掌握如何使用PL/SQL語言進行編程和最佳化PL/SQL語句。
第4篇 Oracle套用開發(第22~23章)
本篇主要內容包括:在.NET中連線Oracle,在Java中連線Oracle等。通過本篇的學習,讀者可以掌握真正的項目開發中的資料庫連線技術。
學習建議
書中列舉了很多實際的例子,希望這些例子對大家有所幫助。
堅持編程:編程需要大量的練習。
學習本書時,需要從總體框架掌握Oracle的脈絡,而不只是學習PL/SQL語句。
本書讀者對象
需要全面學習PL/SQL開發技術的人員;
使用各種語言的軟體程式設計師;
Oracle資料庫管理員;
專業培訓機構的學員;
軟體開發項目經理;
社會培訓班學員;
需要案頭必備一本PL/SQL查詢手冊的人員。
致謝
本書主要由趙越(渤海大學)編寫。由於時間匆忙,編寫中難免有所疏漏和不妥之處,敬請不吝指正。