目錄
第1章 Oracle PL/SQL程式開發概覽 3
1.1 PL/SQL的歷史和背景 4
1.2 Oracle開發架構 6
1.2.1 資料庫 7
1.2.2 PL/SQL語言 8
1.2.3 Oracle處理架構 10
1.2.4 兩層模型 11
1.2.5 n層模型 12
1.3 本章小結 13
1.4 精熟測驗 13
第2章 新特性 15
2.1 SQL新特性 16
2.1.1 用數據目錄DIRECTORY限定LIBRARY對象 16
2.1.2 使用有效時間(VT)來定義表 17
2.1.3 增強的Oracle原生LEFT OUTER JOIN語法 18
2.1.4 基於序列的列的默認值 18
2.1.5 顯式NULL插入的默認值 19
2.1.6 標識列 20
2.1.7 STRING和RAW類型大小限制的增加 21
2.1.8 將SQL語句的結果傳遞給外部程式 21
2.1.9 查詢行限制和偏移的原生SQL支持 23
2.1.10 MySQL應用程式的Oracle資料庫驅動程式 26
2.1.11 SQL CROSS APPLY、OUTER APPLY和LATERAL 26
2.1.12 BEQUEATH CURRENT_USER視圖 28
2.2 PL/SQL新特性 28
2.2.1 調用者許可權函式的快取 29
2.2.2 添加PL/SQL程式單元調用者到白名單 29
2.2.3 PL/SQL類型的原生客戶端API支持 30
2.2.4 新的PL/SQL包utl_call_stack 30
2.2.5 dbms_utility包添加了expand_sql_txt子程式 30
2.2.6 dbms_sql包為parse過程添加了新的模式 32
2.2.7 SQL WITH子句中的PL/SQL函式 32
2.2.8 SQL中允許PL/SQL特定的數據類型 33
2.2.9 隱式的REF CURSOR參數綁定 36
2.3 支持腳本 36
2.4 本章小結 36
2.5 精熟測驗 36
第3章 PL/SQL基礎知識 39
3.1 塊結構 40
3.1.1 執行塊 40
3.1.2 基本塊結構 41
3.1.3 聲明塊 43
3.1.4 異常塊 44
3.2 塊中變數的行為 45
3.2.1 匿名塊 45
3.2.2 嵌套匿名塊 49
3.2.3 局部命名塊 51
3.2.4 存儲命名塊 54
3.3 基本標量和複合數據類型 56
3.3.1 標量數據類型 56
3.3.2 屬性和表的錨定 58
3.3.3 複合數據類型 60
3.4 控制結構 72
3.4.1 條件結構 72
3.4.2 疊代結構 74
3.5 異常 81
3.5.1 用戶自定義異常 82
3.5.2 動態的用戶自定義異常 84
3.6 批量操作 84
3.7 函式、過程和包 86
3.7.1 函式 87
3.7.2 過程 88
3.7.3 包 90
3.8 事務作用域 94
3.8.1 單事務作用域 95
3.8.2 多事務作用域 96
3.9 資料庫觸發器 96
3.10 本章小結 97
3.11 精熟測驗 97
第4章 語言基本知識 99
4.1 辭彙單元 99
4.1.1 分隔設定 100
4.1.2 標識符 103
4.1.3 字面值 105
4.1.4 注釋 106
4.2 變數和數據類型 107
4.2.1 變數數據類型 108
4.2.2 標量數據類型 111
4.2.3 大對象 125
4.2.4 複合數據類型 126
4.2.5 系統引用游標 130
4.3 本章小結 132
4.4 精熟測驗 132
第5章 控制結構 134
5.1 條件語句 135
5.1.1 IF語句 141
5.1.2 CASE語句 145
5.1.3 條件編譯語句 147
5.2 疊代語句 150
5.2.1 簡單循環語句 150
5.2.2 FOR循環語句 156
5.2.3 WHILE循環語句 158
5.3 游標結構 161
5.3.1 隱式游標 162
5.3.2 顯式游標 166
5.4 批語句 177
5.4.1 BULK COLLECT INTO
語句 178
5.4.2 FORALL語句 182
5.5 支持腳本 187
5.6 本章小結 187
5.7 精熟測驗 187
第6章 集合 189
6.1 集合介紹 190
6.2 對象類型:變長數組和
表集合 192
6.2.1 變長數組集合 192
6.2.2 表集合 195
6.3 關聯數組 209
6.4 Oracle集合API 216
6.4.1 COUNT方法 218
6.4.2 DELETE方法 219
6.4.3 EXISTS方法 220
6.4.4 EXTEND方法 221
6.4.5 FIRST方法 222
6.4.6 LAST方法 222
6.4.7 LIMIT方法 223
6.4.8 NEXT方法 223
6.4.9 PRIOR方法 224
6.4.10 TRIM方法 224
6.5 支持腳本 226
6.6 本章小結 226
6.7 精熟測驗 226
第7章 錯誤管理 228
7.1 異常類型和作用域 229
7.1.1 編譯時錯誤 230
7.1.2 運行時錯誤 232
7.2 異常管理內置函式 238
7.3 用戶定義的異常 240
7.3.1 聲明用戶定義的異常 240
7.3.2 動態的用戶定義的異常 242
7.4 異常堆疊函式 245
7.5 支持腳本 250
7.6 本章小結 250
7.7 精熟測驗 251
第8章 函式和過程 255
8.1 函式和過程架構 256
8.2 事務作用域 262
8.2.1 調用子例程 263
8.2.2 位置表示法 264
8.2.3 命名表示法 264
8.2.4 混合表示法 264
8.2.5 排除表示法 264
8.2.6 SQL調用表示法 265
8.3 函式 265
8.3.1 函式模型選擇 267
8.3.2 創建選項 267
8.3.3 按值傳遞函式 279
8.3.4 按引用傳遞函式 291
8.4 過程 294
8.4.1 按值傳遞過程 295
8.4.2 按引用傳遞過程 297
8.5 支持腳本 299
8.6 本章小結 300
8.7 精熟測驗 300
第9章 包 302
9.1 包架構 303
9.2 包規範 308
9.2.1 原型特性 309
9.2.2 連續可重用預編譯器指令 311
9.2.3 變數 312
9.2.4 類型 314
9.2.5 組件:函式與過程 316
9.3 包主體 318
9.3.1 原型特性 318
9.3.2 變數 320
9.3.3 類型 322
9.3.4 組件:函式與過程 323
9.4 定義者與調用者許可權模型 326
9.5 管理資料庫目錄中的包 329
9.5.1 查找、驗證和描述包 329
9.5.2 檢查依賴關係 330
9.5.3 比較驗證方法:時間戳與
簽名 331
9.6 本章小結 332
9.7 精熟測驗 332
第10章 大對象 334
10.1 使用內部存儲的LOB
類型 335
10.1.1 低於32K的LOB
賦值 335
10.1.2 高於32K的LOB賦值 337
10.2 將檔案讀入內部存儲的列 345
10.2.1 將本地檔案讀入CLOB
或NCLOB列 346
10.2.2 將本地檔案讀入BLOB列 348
10.2.3 通過Web頁面處理LOB 351
10.3 使用二進制檔案(BFILE) 358
10.3.1 創建和使用虛擬目錄 359
10.3.2 讀取規範路徑名與檔案名稱 365
10.4 了解dbms_lob包 371
10.4.1 包常量 371
10.4.2 包異常 373
10.4.3 打開與關閉方法 373
10.4.4 操作方法 374
10.4.5 內省方法 380
10.4.6 BFILE方法 384
10.4.7 臨時LOB方法 385
10.4.8 安全連結方法 387
10.5 支持腳本 390
10.5.1 從LONG轉換為CLOB的
腳本 390
10.5.2 管理來自於檔案系統的
LOB 390
10.5.3 通過Web管理CLOB和
BLOB LOB 390
10.5.4 通過Web管理
BFILE LOB 390
10.6 本章小結 391
10.7 精熟測驗 391
第11章 對象類型 393
11.1 對象基礎知識 396
11.1.1 聲明對象類型 396
11.1.2 實現對象主體 399
11.1.3 對象類型白名單 403
11.1.4 getter和setter 404
11.1.5 靜態成員方法 406
11.1.6 比較對象 408
11.2 繼承和多態 415
11.2.1 聲明子類 416
11.2.2 實現子類 417
11.2.3 類型演變 421
11.3 實現對象類型集合 422
11.3.1 聲明對象類型集合 422
11.3.2 實現對象類型集合 423
11.4 支持腳本 426
11.5 本章小結 426
11.6 精熟測驗 426
第12章 觸發器 429
12.1 觸發器簡介 430
12.2 資料庫觸發器架構 432
12.3 數據定義語言觸發器 435
12.3.1 事件屬性函式 437
12.3.2 構建DDL觸發器 448
12.4 數據操作語言觸發器 450
12.4.1 語句級觸發器 451
12.4.2 行級觸發器 453
12.5 複合觸發器 460
12.6 Instead of觸發器 464
12.7 系統和資料庫事件觸發器 468
12.8 觸發器限制 470
12.8.1 最大觸發器尺寸 470
12.8.2 SQL語句 470
12.8.3 LONG和LONG RAW
數據類型 471
12.8.4 變異表 471
12.8.5 系統觸發器 472
12.9 支持腳本 473
12.10 本章小結 473
12.11 精熟測驗 473
第13章 動態SQL 475
13.1 動態SQL架構 476
13.2 本地動態SQL(NDS) 477
13.2.1 動態語句 478
13.2.2 帶輸入的動態語句 481
13.2.3 帶輸入和輸出的動態語句 483
13.2.4 帶未知數量的輸入的
動態語句 486
13.3 dbms_sql包 488
13.3.1 動態語句 489
13.3.2 帶輸入變數的動態語句 492
13.3.3 帶輸入變數和固定輸出的
動態語句 494
13.3.4 帶輸入和輸出變數的
動態語句 498
13.3.5 dbms_sql包定義 503
13.4 支持腳本 516
13.5 本章小結 517
13.6 精熟測驗 517
附錄A Oracle資料庫入門 521
A.1 Oracle資料庫架構 522
A.2 啟動和停止Oracle
Database 12c伺服器 528
A.2.1 UNIX或Linux操作 529
A.2.2 Microsoft Windows操作 533
A.3 啟動和停止Oracle偵聽器 534
A.4 多版本並發控制 539
A.4.1 數據事務 540
A.4.2 DML鎖定和隔離控制 542
A.5 定義者許可權和調用者許可權 543
A.5.1 定義者許可權 544
A.5.2 調用者許可權 544
A.6 SQL互動和批處理 545
A.6.1 SQL*Plus命令行界面 545
A.6.2 Oracle SQL Developer界面 564
A.7 資料庫管理員 570
A.7.1 配置用戶 570
A.7.2 使用資料庫約束 577
A.7.3 安全加固 586
A.7.4 數據管理 595
A.8 SQL調優 597
A.8.1 EXPLAIN PLAN語句 598
A.8.2 DBMS_XPLAN包 599
A.9 SQL跟蹤 603
A.9.1 跟蹤會話狀態 603
A.9.2 將原始跟蹤檔案轉換為
可讀跟蹤檔案 605
A.10 本附錄小結 606
附錄B SQL入門 607
B.1 Oracle SQL數據類型 610
B.2 數據定義語言(DDL) 614
B.2.1 CREATE語句 615
B.2.2 ALTER語句 675
B.2.3 RENAME語句 691
B.2.4 DROP語句 691
B.2.5 TRUNCATE語句 694
B.2.6 COMMENT語句 694
B.3 數據管理語言(DML) 694
B.3.1 符合ACID的事務 695
B.3.2 INSERT語句 698
B.3.3 UPDATE語句 712
B.3.4 DELETE語句 724
B.3.5 MERGE語句 728
B.4 事務控制語言(TCL) 735
B.5 查詢:SELECT語句 736
B.5.1 返回列或者返回列運算結果
的查詢 738
B.5.2 聚合查詢 751
B.5.3 選擇性返回列或結果的
查詢 756
B.5.4 聯接結果 765
B.5.5 數據的聯接 767
B.5.6 集合的聯接 775
B.6 本附錄小結 778
附錄C SQL內置函式 779
C.1 字元函式 780
C.1.1 ASCII函式 780
C.1.2 ASCIISTR函式 780
C.1.3 CHR函式 781
C.1.4 CONCAT函式 781
C.1.5 INITCAP函式 782
C.1.6 INSTR函式 782
C.1.7 LENGTH函式 783
C.1.8 LOWER函式 783
C.1.9 LPAD函式 784
C.1.10 LTRIM函式 784
C.1.11 REPLACE函式 785
C.1.12 REVERSE函式 785
C.1.13 RPAD函式 785
C.1.14 RTRIM函式 786
C.1.15 UPPER函式 786
C.2 數據類型轉換函式 787
C.2.1 CAST函式 787
C.2.2 CONVERT函式 789
C.2.3 TO_CHAR函式 790
C.2.4 TO_CLOB函式 792
C.2.5 TO_DATE函式 792
C.2.6 TO_LOB函式 793
C.2.7 TO_NCHAR函式 794
C.2.8 TO_NCLOB函式 795
C.2.9 TO_NUMBER函式 795
C.3 日期-時間轉換函式 796
C.3.1 ADD_MONTHS函式 796
C.3.2 CURRENT_DATE函式 796
C.3.3 CURRENT_TIMESTAMP
函式 796
C.3.4 DBTIMEZONE函式 797
C.3.5 EXTRACT函式 797
C.3.6 FROM_TZ函式 798
C.3.7 LAST_DAY函式 798
C.3.8 LOCALTIMESTAMP函式 799
C.3.9 MONTHS_BETWEEN函式 799
C.3.10 NEW_TIME函式 799
C.3.11 ROUND函式 800
C.3.12 SYSDATE函式 801
C.3.13 SYSTIMESTAMP函式 801
C.3.14 TO_CHAR(date)函式 801
C.3.15 TO_DSINTERVAL函式 802
C.3.16 TO_TIMESTAMP函式 803
C.3.17 TO_TIMESTAMP_TZ函式 803
C.3.18 TO_YMINTERVAL函式 804
C.3.19 TRUNC(date)函式 804
C.3.20 TZ_OFFSET函式 804
C.4 集合管理函式 805
C.4.1 CARDINALITY函式 805
C.4.2 COLLECT函式 805
C.4.3 POWERMULTISET函式 809
C.4.4 POWERMULTISET_BY_
CARDINALITY函式 809
C.4.5 SET函式 810
C.5 集合運算符 810
C.5.1 CARDINALITY運算符 812
C.5.2 EMPTY運算符 812
C.5.3 MULTISET運算符 812
C.5.4 MULTISET EXCEPT
運算符 813
C.5.5 MULTISET INTERSECT
運算符 814
C.5.6 MULTISET UNION運算符 814
C.5.7 SET運算符 815
C.5.8 SUBMULTISET OF運算符 816
C.6 數字函式 816
C.6.1 CEIL函式 817
C.6.2 FLOOR函式 817
C.6.3 MOD函式 817
C.6.4 POWER函式 819
C.6.5 REMAINDER函式 820
C.6.6 ROUND函式 821
C.7 錯誤報告函式 821
C.7.1 SQLCODE函式 821
C.7.2 SQLERRM函式 822
C.8 雜項函式 823
C.8.1 BFILENAME函式 824
C.8.2 COALESCE函式 826
C.8.3 DECODE函式 826
C.8.4 DUMP函式 827
C.8.5 EMPTY_BLOB函式 828
C.8.6 EMPTY_CLOB函式 830
C.8.7 GREATEST函式 831
C.8.8 LEAST函式 833
C.8.9 NANVL函式 834
C.8.10 NULLIF函式 835
C.8.11 NVL函式 836
C.8.12 SYS_CONTEXT函式 836
C.8.13 TABLE函式 839
C.8.14 TREAT函式 842
C.8.15 USERENV函式 843
C.8.16 VSIZE函式 844
C.9 本附錄小結 844
附錄D PL/SQL內置程式包和類型 845
D.1 Oracle Database 11g和12c的
新程式包 846
D.2 程式包使用示例 852
D.2.1 DBMS_APPLICATION_INFO
示例 853
D.2.2 DBMS_COMPARISON 858
D.2.3 DBMS_CRYPTO 863
D.2.4 DBMS_FGA 866
D.2.5 案例研究:查詢工具 867
D.3 支持腳本 874
D.4 本附錄小結 874
附錄E 正則表達式入門 875
E.1 正則表達式簡介 876
E.1.1 字元類 876
E.1.2 校準類 880
E.1.3 元字元 880
E.1.4 元序列 880
E.1.5 字面值 881
E.2 正則表達式實現 881
E.2.1 REGEXP_COUNT函式 882
E.2.2 REGEXP_INSTR函式 885
E.2.3 REGEXP_LIKE函式 886
E.2.4 REGEXP_REPLACE函式 887
E.2.5 REGEXP_SUBSTR函式 889
E.3 支持腳本 890
E.4 本附錄小結 890
附錄F 包裝PL/SQL代碼入門 891
F.1 包裝PL/SQL的限制 892
F.1.1 PL/SQL的wrap實用程式的
局限性 892
F.1.2 DBMS_DDL.WRAP函式的
限制 892
F.2 使用wrap命令行實用程式 893
F.3 使用DBMS_DDL命令行
實用程式 893
F.3.1 WRAP函式 893
F.3.2 CREATE_WRAPPED過程 898
F.4 本附錄小結 899
附錄G PL/SQL分層的配置
檔案入門 900
G.1 配置架構 901
G.2 收集配置檔案數據 902
G.3 配置檔案數據 905
G.3.1 讀取原始輸出 905
G.3.2 定義PL/SQL配置檔案表 907
G.3.3 查詢分析數據 909
G.4 使用plshprof命令行
實用程式 910
G.5 支持腳本 912
G.6 本附錄小結 912
附錄H PL/SQL保留字和關鍵字 913
附錄I 精熟測驗答案 927
術語表 951