目 錄 Contents
譯者序
前 言
致 謝
Oracle 21c PL/SQL新特性簡介
第1章 PL/SQL概念1
1.1 實驗1:PL/SQL架構1
1.1.1 PL/SQL架構2
1.1.2 PL/SQL塊結構4
1.1.3 PL/SQL是如何執(zhí)行的7
1.2 實驗2:PL/SQL開發(fā)環(huán)境7
1.2.1 初步掌握SQL Developer8
1.2.2 初步掌握SQL*Plus9
1.2.3 執(zhí)行PL/SQL腳本11
1.3 實驗3:PL/SQL基礎知識14
1.3.1 DBMS_OUTPUT.PUT_LINE
語句14
1.3.2 替代變量的功能16
本章小結19
第2章 PL/SQL語言的基礎知識21
2.1 實驗1:PL/SQL語言的各種組件21
2.1.1 PL/SQL變量22
2.1.2 PL/SQL保留字24
2.1.3 分隔符25
2.1.4 PL/SQL中的文字25
2.2 實驗2:錨定數據類型26
2.3 實驗3:變量、塊、嵌套塊和
標簽的作用域27
2.3.1 變量的作用域28
2.3.2 嵌套塊和標簽28
本章小結30
第3章 PL/SQL中的SQL語句31
3.1 實驗1:PL/SQL中的SQL語句31
3.1.1 使用SELECT INTO語句對
變量進行初始化31
3.1.2 在PL/SQL塊中使用DML語句33
3.1.3 在PL/SQL塊中使用序列34
3.2 實驗2:在PL/SQL中使用
事務控制語句35
3.2.1 COMMIT、ROLLBACK和
SAVEPOINT語句35
3.2.2 SET TRANSACTION語句38
本章小結39
第4章 條件控制:IF語句40
4.1 實驗1:IF語句40
4.1.1 IF-THEN語句41
4.1.2 IF-THEN-ELSE語句42
4.2 實驗2:ELSIF語句44
4.3 實驗3:嵌套的IF語句48
本章小結50
第5章 條件控制:CASE語句52
5.1 實驗1:CASE語句52
5.1.1 簡單CASE語句52
5.1.2 搜索CASE語句54
5.2 實驗2:CASE表達式59
5.3 實驗3:NULLIF和COALESCE
函數63
5.3.1 NULLIF函數63
5.3.2 COALESCE函數64
本章小結67
第6章 迭代控制:第一部分68
6.1 實驗1:簡單循環(huán)68
6.1.1 EXIT語句69
6.1.2 EXIT WHEN語句72
6.2 實驗2:WHILE循環(huán)73
6.2.1 使用WHILE循環(huán)73
6.2.2 提前終止WHILE循環(huán)76
6.3 實驗3:數字型FOR循環(huán)78
6.3.1 在循環(huán)中使用IN選項79
6.3.2 在循環(huán)中使用REVERSE選項82
6.3.3 在循環(huán)中使用迭代控制選項82
6.3.4 提前終止數字型FOR循環(huán)86
本章小結87
第7章 迭代控制:第二部分88
7.1 實驗1:CONTINUE語句88
7.1.1 使用CONTINUE語句88
7.1.2 使用CONTINUE WHEN語句91
7.2 實驗2:嵌套循環(huán)94
7.2.1 使用嵌套循環(huán)94
7.2.2 使用循環(huán)標簽95
本章小結97
第8章 錯誤處理和內置異常98
8.1 實驗1:錯誤處理98
8.2 實驗2:內置異常100
本章小結105
第9章 異常106
9.1 實驗1:異常的作用域106
9.2 實驗2:用戶定義的異常109
9.3 實驗3:異常的傳播113
9.3.1 異常如何傳播113
9.3.2 重新觸發(fā)異常117
本章小結118
第10章 異常:高級概念119
10.1 實驗1:RAISE_APPLICATION_
ERROR過程119
10.2 實驗2:EXCEPTION_INIT指令122
10.3 實驗3:SQLCODE和SQLERRM
函數124
本章小結126
第11章 游標127
11.1 實驗1:游標的類型127
11.1.1 隱式游標128
11.1.2 顯式游標130
11.2 實驗2:基于表和基于游標
的記錄136
11.2.1 基于表的記錄136
11.2.2 基于游標的記錄138
11.3 實驗3:游標型FOR循環(huán)139
11.4 實驗4:嵌套的游標141
本章小結143
第12章 高級游標144
12.1 實驗1:參數化游標144
12.2 實驗2:游標變量和游標表達式149
12.2.1 游標變量149
12.2.2 游標表達式155
12.3 實驗3:FOR UPDATE游標157
本章小結160
第13章 觸發(fā)器161
13.1 實驗1:什么是觸發(fā)器161
13.1.1 數據庫觸發(fā)器161
13.1.2 BEFORE觸發(fā)器164
13.1.3 AFTER觸發(fā)器168
13.1.4 自治事務169
13.2 實驗2:觸發(fā)器的類型171
13.2.1 行級觸發(fā)器和語句級觸發(fā)器171
13.2.2 INSTEAD OF觸發(fā)器172
本章小結176
第14章 變異表和組合觸發(fā)器177
14.1 實驗1:變異表177
14.2 實驗2:組合觸發(fā)器179
本章小結183
第15章 集合184
15.1 實驗1:PL/SQL表184
15.1.1 關聯(lián)數組185
15.1.2 嵌套表187
15.1.3 集合方法190
15.2 實驗2:變長數組193
15.3 實驗3:多維集合197
15.4 實驗4:集合迭代控制和限定
表達式199
15.4.1 集合迭代控制199
15.4.2 限定表達式202
本章小結208
第16章 記錄209
16.1 實驗1:用戶定義的記錄209
16.1.1 用戶定義的記錄209
16.1.2 在記錄中使用限定表達式211
16.1.3 記錄的兼容性212
16.2 實驗2:嵌套記錄215
16.3 實驗3:記錄集合217
本章小結220
第17章 本地動態(tài)SQL221
17.1 實驗1:EXECUTE IMMEDIATE
語句221
17.2 實驗2:OPEN FOR、FETCH和
CLOSE語句230
本章小結234
第18章 批量SQL235
18.1 實驗1:FORALL語句235
18.1.1 FORALL語句236
18.1.2 SAVE EXCEPTIONS選項239
18.1.3 INDICES OF選項241
18.1.4 VALUES OF選項??242
18.2 實驗2:BULK COLLECT子句244
18.3 實驗3:在SQL語句中使用
綁定集合變量252
18.3.1 在EXECUTE IMMEDIATE
語句中使用綁定集合變量252
18.3.2 在OPEN FOR、FETCH和
CLOSE語句中使用綁定集
合變量258
本章小結262
第19章 過程263
19.1 實驗1:創(chuàng)建嵌套過程263
19.1.1 嵌套過程264
19.1.2 參數模式265
19.1.3 前向聲明269
19.2 實驗2:創(chuàng)建獨立過程270
本章小結273
第20章 函數274
20.1 實驗1:創(chuàng)建嵌套函數274
20.2 實驗2:創(chuàng)建獨立函數278
本章小結282
第21章 包283
21.1 實驗1:創(chuàng)建包283
21.1.1 創(chuàng)建包規(guī)范284
21.1.2 創(chuàng)建包體285
21.2 實驗2:包的實例化和初始化289
21.2.1 包的實例化和初始化290
21.2.2 包的運行狀態(tài)291
21.3 實驗3:指定SERIALLY_
REUSABLE選項的包292
本章小結296
第22章 存儲代碼中涉及的
高級概念297
22.1 實驗1:子程序重載297
22.2 實驗2:結果集緩存的函數303
22.3 實驗3:在SQL語句中調用
PL/SQL函數306
22.3.1 在SQL語句中調用函數306
22.3.2 使用管道表函數307
22.3.3 使用SQL宏309
本章小結316
第23章 Oracle對象類型317
23.1 實驗1:對象類型317
23.1.1 創(chuàng)建對象類型319
23.1.2 對象類型與集合的嵌套
使用322
23.2 實驗2:對象類型方法325
23.2.1 使用構造函數方法326
23.2.2 使用成員方法328
23.2.3 使用靜態(tài)方法329
23.2.4 比較對象330
本章小結334
第24章 在表中存儲對象類型335
24.1 實驗1:在關系表中存儲
對象類型335
24.2 實驗2:在對象表中存儲
對象類型339
24.3 實驗3:對象類型的演化340
本章小結345
第25章 使用DBMS_SQL包
構建動態(tài)SQL346
25.1 實驗1:使用DBMS_SQL包
生成動態(tài)SQL346
本章小結354
附錄A PL/SQL格式化規(guī)則355
附錄B STUDENT數據庫模式358