內容簡介
《Oracle PL/SQL程式設計(第6版)》基於Oracle資料庫12C,從用PL/SQL編程、PL/SQL程式結構、PL/SQL程式數據、PL/SQL中的SQL、構造PL/SQL應用程式、**PL/SQL主題這6個方面詳細而系統地討論了PL/SQL以及如何有效地使用它。本書能夠幫助你充分利用PL/SQL來解決資料庫開發中遇到的各種問題,引導你掌握各種構建套用的技巧和技術,以便使你編寫出高效、可維護的代碼。本書不但介紹了大量Oracle資料庫12C的PL/SQL新性能,還提供了許多最佳化PL/SQL性能的新方法。
《Oracle PL/SQL程式設計(第6版)》結構清晰,示例豐富,實踐性強,適用於Oracle資料庫開發人舉朽朵戶員、Oracle數據遙組蜜庫管理員等相關資料庫從業人員,也可以作為各大、中專院校相關專業師生的參考用去酷店書和相關培訓機構的培訓教戰協想材。
圖書目錄
(上)
第 1部分 用PL/SQL編程
第 1章 PL/SQL介紹 3
1.1 什麼是PL/SQL 3
1.2 PL/SQL的起源 4
1.2.1 早期的PL/SQL 4
1.2.2 提高套用的可移植性 4
1.2.3 提高執行許可權控制和交易
完整性 5
1.2.4 低調開始,持續改進 5
1.3 這就是PL/SQL 6
1.3.1 與SQL的集成 6
1.3.2 控制和條件邏輯 7
1.3.3 出錯處理 8
1.4 關於PL/SQL版本 9
1.4.1 Oracle資料庫12c中PL/SQL
的新特性 10
1.5 可供PL/SQL***使用的
資源 12
1.5.1 O’Reilly的PL/SQL系列圖書 13
1.5.2 網路上的PL/SQL資源 14
1.6 一些建議 15
1.6.1 別急,慢慢來 15
1.6.2 不要畏懼尋求幫助 16
1.6.3 採用有創造性的甚到激進的
方法 17
第 2章 創建和運行PL/SQL
代碼 18
2.1 在資料庫中導航 18
2.2 創府戀符櫃建和編輯原始碼 19
2.3 SQL*Plus 19
2.3.1 啟動SQL*Plus 21
2.3.2 背寒運行SQL語句 22
2.3.3 運行PL/SQL程式 22
2.3.4 運行一個腳本 24
2.3.5 什麼是“當前” 24
2.3.6 其他SQL*Plus任務 25
2.3.7 SQL*Plus中的異常處理 29
2.3.8 為什麼SQL*Plus讓我們
又愛又恨 30
2.4 執行基本的PL/SQL任務 30
2.4.1 創建存儲程式 31
2.4.2 執行存儲的程式 33
2.4.3 顯示存儲程式 34
2.4.4 存儲程式的授權和別名 35
2.4.5 刪除一個存儲程式 36
2.4.6 隱藏存儲程式的原始碼 36
2.5 編輯PL/SQL的環境 37
2.6 從其他語言中調用PL/SQL 37
2.6.1 C語言,使用Oracle預編輯器
(Pro*C) 38
2.6.2 Java:使用JDBC 39
2.6.3 Perl:使用Perl DBI和DBD::
Oracle 40
2.6.4 PHP:使用Oracle擴展 41
2.6.5 PL/SQL Server Pages 42
2.6.6 其他 43
第3章 語言基礎 44
3.1 PL/SQL塊結構 44
3.1.1 匿名塊 46
3.1.2 命名塊 47
3.1.3 嵌套塊 47
3.1.4 作用範圍 48
3.1.5 規範SQL語句中對變數和
列的引用 49
3.1.6 可見性 51
3.2 PL/SQL字元集 54
3.3 標識符 56
3.3.1 保留字 57
3.3.2 空白和關鍵字 58
3.4 直接量 59
3.4.1 NULL 60
3.4.2 在一個直接量字元串中嵌入
單引號 61
3.4.3 數字直白嫌多接量 61
3.4.4 布爾直接量 62
3.5 分號分隔設定 62
3.6 注釋 63
3.6.1 單行注釋語法 63
3.6.2 多行注釋語法 63
3.7 PRAGMA關鍵字 64
3.8 標籤 65
第 2部分 PL/SQL程式結構
第4章 條件與順序控制 69
4.1 IF語句 69
4.1.1 IF-THEN組合 69
4.1.2 IF-THEN-ELSE的組合 71
4.1.3 IF-THEN-ELSIF組合 73
4.1.4 避免IF語法陷阱 73
4.1.5 嵌套的IF語句 75
4.1.6 短路估算 75
4.2 CASE語句和表達式 77
4.2.1 簡單的CASE語句 77
4.2.2 搜尋CASE語句 79
4.2.3 嵌套CASE語句 81
4.2.4 CASE表達式 81
4.3 GOTO語句 83
4.4 NULL語句 84
4.4.1 提高程式的可讀性 84
4.4.2 在標籤後使用NULL 84
第5章 循環疊代處理 86
5.1 循環的基礎知識 86
5.1.1 不同循環的示例 86
5.1.2 PL/SQL循環的結構 88
5.2 簡單循環 89
5.2.1 終止簡單循環:EXIT
和EXIT WHEN 89
5.2.2 模仿REPEAT UNTIL循環 90
5.2.3 故意的無限循環 91
5.3 WHILE循環 92
5.4 數值型FOR循環 93
5.4.1 數值型FOR循環的規則 94
5.4.2 數值型FOR循環的示例 94
5.4.3 處理特殊增量 95
5.5 游標FOR循環 96
5.5.1 游標FOR循環的示例 97
5.6 循環標籤 98
5.7 CONTINUE語句 99
5.8 疊代處理技巧 102
5.8.1 為循環索引使用可理解的
名稱 102
5.8.2 以正確的方式說再見 102
5.8.3 獲取FOR循環執行的信息 103
5.8.4 循環SQL語句 104
第6章 異常處理 106
6.1 異常處理概念和術語 106
6.2 定義異常 108
6.2.1 聲明命名異常 108
6.2.2 關聯異常名稱與錯誤代碼 109
6.2.3 命名的系統異常 112
6.2.4 異常作用範圍 114
6.3 引發異常 115
6.3.1 RAISE語句 115
6.3.2 使用RAISE_APPLICATION_
ERROR 116
6.4 處理異常 117
6.4.1 內置錯誤函式 118
6.4.2 單一處理句柄中結合多個
異常 122
6.4.3 未處理異常 123
6.4.4 未處理異常的傳播 123
6.4.5 繼續過去的異常 125
6.4.6 編寫WHEN OTHERS處理
代碼 127
6.5 構建有效的錯誤管理架構 129
6.5.1 確定我們的異常管理策略 129
6.5.2 對不同類型異常進行標準化
處理 130
6.5.3 程式特定錯誤代碼的組織
使用 133
6.5.4 使用標準的錯誤管理程式 133
6.5.5 使用自己的異常“對象” 135
6.5.6 創建常見錯誤處理的標準
模板 137
6.6 充分利用PL/SQL錯誤
管理 138
第3部分 PL/SQL程式數據
第7章 使用程式數據 141
7.1 程式數據的命名 141
7.2 PL/SQL數據類型概述 143
7.2.1 字元數據 143
7.2.2 數字 144
7.2.3 日期、時間戳和時間間隔 145
7.2.4 布爾類型 145
7.2.5 二進制數據類型 146
7.2.6 ROWID 146
7.2.7 REF CURSOR 146
7.2.8 Internet數據類型 147
7.2.9 “Any”數據類型 147
7.2.10 用戶自定義數據類型 147
7.3 程式數據的聲明 147
7.3.1 聲明一個變數 148
7.3.2 聲明常量 148
7.3.3 NOT NULL語句 149
7.3.4 錨定聲明 149
7.3.5 游標和表的錨 151
7.3.6 使用錨定聲明的益處 152
7.3.7 NOT NULL數據類型的錨 153
7.4 程式設計師定義的子類型 153
7.5 數據類型轉換 154
7.5.1 隱式類型轉換 155
7.5.2 顯式類型轉換 156
第8章 字元串 162
8.1 字元串類型 162
8.1.1 VARCHAR2數據類型 163
8.1.2 CHAR數據類型 164
8.1.3 String子類型 164
8.2 使用字元串 165
8.2.1 指定字元串常量 165
8.2.2 不可列印字元 167
8.2.3 拼接字元串 168
8.2.4 處理大小寫 169
8.2.5 傳統的檢索、提取和替換 172
8.2.6 填充 174
8.2.7 剪裁 176
8.2.8 正則表達式的檢索、提取和
替換 177
8.2.9 使用空字元串 187
8.2.10 混用CHAR和
VARCHAR2 188
8.3 字元串函式快速參考 190
第9章 數字 199
9.1 數值型數字類型 199
9.1.1 NUMBER類型 200
9.1.2 PLS_INTEGER類型 204
9.1.3 BINARY_INTEGER類型 205
9.1.4 SIMPLE_INTEGER類型 205
9.1.5 BINARY_FLOAT和
BINARY_DOUBLE類型 207
9.1.6 SIMPLE_FLOAT和
SIMPLE_DOUBLE類型 212
9.1.7 數字子類型 212
9.2 數字轉換 213
9.2.1 TO_NUMBER函式 213
9.2.2 TO_CHAR函式 216
9.2.3 CAST函式 221
9.2.4 隱式轉換 222
9.3 數字運算符 224
9.4 數字函式 224
9.4.1 四捨五入和截斷函式 224
9.4.2 三角函式 225
9.4.3 數字函式的快速參考 225
第 10章 日期和時間戳 230
10.1 Datetime數據類型 230
10.1.1 聲明日期時間變數 233
10.1.2 選擇日期時間數據類型 233
10.2 獲取當前日期和時間 234
10.3 INTERVAL數據類型 236
10.3.1 聲明INTERVAL變數 237
10.3.2 什麼時候使用INTERVAL 238
10.4 日期時間轉換 240
10.4.1 從字元串到日期時間 240
10.4.2 從日期時間到字元串 242
10.4.3 使用時區 245
10.4.4 **匹配需要格式掩碼 247
10.4.5 讓**匹配更輕鬆 248
10.4.6 解釋滑動視窗中兩位數字的
年份 248
10.4.7 把時區轉換成字元串 249
10.4.8 用填充模式把輸出補齊 250
10.5 日期和時間戳直接量 251
10.6 時間間隔的轉換 252
10.6.1 從數字到時間間隔的轉換 252
10.6.2 把字元串轉換成間隔 253
10.6.3 時間間隔的格式化顯示 254
10.7 時間間隔直接量 254
10.8 CAST和EXTRACT 256
10.8.1 CAST函式 256
10.8.2 EXTRACT函式 258
10.9 日期時間的算法 258
10.9.1 時間間隔和日期時間的
算法 259
10.9.2 DATE數據類型的日期
算法 260
10.9.3 計算兩個日期時間之間的
時間間隔 260
10.9.4 DATE和TIMESTAMP混合
計算 262
10.9.5 時間間隔的加減運算 263
10.9.6 時間間隔的乘除運算 264
10.9.7 使用不受限制的時間間隔
類型 264
10.10 日期/時間函式的快速
參考 266
第 11章 記錄類型 269
11.1 PL/SQL中的記錄 269
11.1.1 使用記錄的好處 270
11.1.2 聲明記錄 271
11.1.3 程式設計師自定義的記錄類型 273
11.1.4 使用記錄類型 275
11.1.5 記錄的比較 281
11.1.6 觸發器偽記錄 282
第 12章 集合 284
12.1 集合概述 285
12.1.1 集合概念和術語 285
12.1.2 集合類型 287
12.1.3 集合示例 288
12.1.4 使用集合的場合 291
12.1.5 選擇一個集合類型 296
12.2 集合方法(內置) 297
12.2.1 COUNT方法 298
12.2.2 DELETE方法 299
12.2.3 EXISTS方法 300
12.2.4 EXTEND方法 300
12.2.5 FIRST和LAST方法 301
12.2.6 LIMIT方法 302
12.2.7 PRIOR和NEXT方法 303
12.2.8 TRIM方法 304
12.3 使用集合 305
12.3.1 聲明集合類型 306
12.3.2 集合變數的聲明和初始化 310
12.3.3 用數據填充集合 313
12.3.4 訪問集合內的數據 318
12.3.5 使用字元串索引的集合 319
12.3.6 複雜數據類型的集合 324
12.3.7 多級集合 327
12.3.8 在SQL中使用集合 335
12.4 嵌套表的多重集合操作 342
12.4.1 測試嵌套表是否相等及成員
歸屬 343
12.4.2 檢查元素是否是嵌套表的
成員 344
12.4.3 執行**別集合操作 345
12.4.4 嵌套表中的去重 346
12.5 schema級別集合的維護 347
12.5.1 必需的許可權 347
12.5.2 集合和數據字典 348
第 13章 其他數據類型 349
13.1 BOOLEAN類型 349
13.2 RAW數據類型 350
13.3 UROWID和ROWID數據
類型 351
13.3.1 獲取ROWID 352
13.3.2 使用ROWID 352
13.4 LOB數據類型 353
13.5 使用LOB 354
13.5.1 理解LOB定位符 356
13.5.2 LOB的空和NULL 357
13.5.3 向LOB中寫入數據 359
13.5.4 讀取LOB數據 361
13.5.5 BFILE的不同之處 363
13.5.6 SecureFiles和BasicFiles 367
13.5.7 臨時LOB 369
13.5.8 原生的LOB操作 372
13.5.9 LOB轉換函式 376
13.6 預定義的對象類型 376
13.6.1 XMLType類型 376
13.6.2 URI類型 379
13.6.3 Any類型 381
第4部分 PL/SQL中的SQL
第 14章 DML和事務管理 387
14.1 PL/SQL中的DML 388
14.1.1 DML簡介 388
14.1.2 DML操作符的游標屬性 391
14.1.3 從DML語句返回信息 392
14.1.4 DML和異常處理 393
14.1.5 DML和記錄 394
14.2 事務管理 397
14.2.1 COMMIT語句 397
14.2.2 ROLLBACK語句 398
14.2.3 SAVEPOINT語句 399
14.2.4 SET TRANSACTION語句 399
14.2.5 LOCK TABLE語句 400
14.3 自治事務 400
14.3.1 定義自治事務 401
14.3.2 自治事務的規則和限制 402
14.3.3 事務的可見性 403
14.3.4 何時使用自治事務 403
14.3.5 創建自治日誌記錄機制 404
第 15章 數據提取 407
15.1 游標基礎 408
15.1.1 一些數據提取術語 408
15.1.2 典型的查詢操作 410
15.1.3 游標屬性介紹 411
15.1.4 在游標中引用PL/SQL
變數 413
15.1.5 顯式與隱式游標之間的
選擇 414
15.2 使用隱式游標 414
15.2.1 隱式游標示例 415
15.2.2 隱式游標的異常處理 416
15.2.3 隱式SQL游標的屬性 418
15.3 使用顯式游標 419
15.3.1 聲明顯式游標 420
15.3.2 打開顯式游標 423
15.3.3 從顯式游標獲取 424
15.3.4 顯式游標中的列別名 425
15.3.5 關閉顯式游標 426
15.3.6 顯式游標屬性 427
15.3.7 游標參數 429
15.4 SELECT…FOR UPDATE 432
15.4.1 COMMIT釋放鎖定 433
15.4.2 WHERE CURRENT
OF子句 434
15.5 游標變數和REF
CURSOR 435
15.5.1 為什麼使用游標變數 436
15.5.2 與靜態游標的相似之處 437
15.5.3 聲明REF CURSOR類型 437
15.5.4 聲明游標變數 438
15.5.5 打開游標變數 439
15.5.6 從游標變數中提取數據 440
15.5.7 游標變數的使用規則 442
15.5.8 將游標變數作為參數傳遞 445
15.5.9 游標變數的約束限制 447
15.6 游標表達式 447
15.6.1 使用游標表達式 448
15.6.2 游標表達式的約束限制 450
第 16章 動態SQL和動態
PL/SQL 451
16.1 NDS語句 452
16.1.1 EXECUTE IMMEDIATE
語句 452
16.1.2 OPEN FOR語句 455
16.1.3 4種動態SQL方法 460
16.2 綁定變數 462
16.2.1 參數模式 463
16.2.2 重複的占位符 465
16.2.3 傳遞NULL值 465
16.3 使用對象和集合 466
16.4 動態PL/SQL 468
16.4.1 建立動態PL/SQL塊 469
16.4.2 用動態塊替換重複代碼 470
16.5 NDS建議 471
16.5.1 對共享程式使用調用者
許可權 471
16.5.2 預測並處理動態錯誤 472
16.5.3 使用綁定而非拼接 474
16.5.4 減少代碼注入的危險 475
16.6 何時使用DBMS_SQL 478
16.6.1 獲得查詢列信息 478
16.6.2 實現第四種方法的動態
SQL需求 479
16.6.3 **小化動態游標解析 485
16.6.4 Oracle資料庫11g新動態
SQL特性 486
16.6.5 DBMS_SQL增強安全 490
(下)
第5部分 構造PL/SQL應用程式
第 17章 過程、函式和參數 497
17.1 代碼模組化 497
17.2 過程 499
17.2.1 調用一個過程 501
17.2.2 過程頭部 501
17.2.3 過程體 501
17.2.4 END標籤 502
17.2.5 RETURN語句 502
17.3 函式 502
17.3.1 函式的結構 503
17.3.2 返回的數據類型 504
17.3.3 END標籤 506
17.3.4 調用函式 506
17.3.5 不帶參數的函式 507
17.3.6 函式頭 508
17.3.7 函式體 508
17.3.8 RETURN語句 509
17.4 參數 510
17.4.1 定義參數 511
17.4.2 實參和形參 511
17.4.3 參數模式 512
17.4.4 在PL/SQL中顯式地關聯
實參和形參 515
17.4.5 NOCOPY參數模式限定符 519
17.4.6 預設值 519
17.5 局部或者嵌套模組 520
17.5.1 使用局部模組的益處 521
17.5.2 局部模組的作用範圍 523
17.5.3 用局部模組使得代碼更
整潔 524
17.6 模組的重載 524
17.6.1 重載的益處 525
17.6.2 重載的限制 528
17.6.3 數字類型的重載 528
17.7 前置聲明 529
17.8 **主題 530
17.8.1 在SQL內部調用我們的
函式 530
17.8.2 表函式 536
17.8.3 確定性函式 545
17.8.4 隱式游標結果(Oracle
資料庫12c) 546
17.9 將模組化進行到底 547
第 18章 程式包 548
18.1 為什麼使用程式包 548
18.1.1 演示程式包的能力 549
18.1.2 與程式包相關的一些概念 552
18.1.3 圖示私有性 553
18.2 構建程式包的規則 554
18.2.1 程式包說明 554
18.2.2 包體 555
18.2.3 包的初始化 557
18.3 包元素的調用規則 561
18.4 使用包數據 562
18.4.1 在一個Oracle會話內全局
可見 562
18.4.2 全局公有數據 563
18.4.3 包游標 563
18.4.4 包的串列化 568
18.5 何時使用包 570
18.5.1 封裝對數據的訪問 570
18.5.2 避免直接量的硬編碼 573
18.5.3 提高內置特性的可用性 575
18.5.4 把邏輯上相關的功能組織
在一起 576
18.5.5 快取靜態的會話數據 576
18.6 包和對象類型 577
第 19章 觸發器 578
19.1 DML觸發器 579
19.1.1 DML觸發器的概念 580
19.1.2 創建DML觸發器 581
19.1.3 DML觸發器的例子:嚴禁
作弊! 586
19.1.4 同一類型的多個觸發器 591
19.1.5 如何對觸發順序排序 592
19.1.6 突變表的錯誤 594
19.1.7 複合觸發器:聚在一處 595
19.2 DDL觸發器 598
19.2.1 創建DDL觸發器 598
19.2.2 可用事件 600
19.2.3 可用屬性 601
19.2.4 使用事件和屬性 602
19.2.5 刪除不可刪除的 606
19.2.6 INSTEAD OFCREATE
觸發器 606
19.3 資料庫事件觸發器 607
19.3.1 創建資料庫事件觸發器 608
19.3.2 STARTUP觸發器 609
19.3.3 SHUTDOWN觸發器 610
19.3.4 LOGON觸發器 610
19.3.5 LOGOFF觸發器 610
19.3.6 SERVERERROR觸發器 611
19.4 INSTEAD OF觸發器 615
19.4.1 創建INSTEAD OF觸發器 615
19.4.2 INSTEAD OF INSERT
觸發器 616
19.4.3 INSTEAD OF UPDATE
觸發器 618
19.4.4 INSTEAD OF DELETE
觸發器 619
19.4.5 填充表 619
19.4.6 嵌套表的lNSTEAD OF
觸發器 620
19.5 AFTER SUSPEND觸發器 621
19.5.1 建立AFTER SUSPEND
觸發器 622
19.5.2 看看真實的觸發器 623
19.5.3 ORA_SPACE_ERROR_lNFO
函式 624
19.5.4 DBMS_RESUMABLE包 625
19.5.5 捕獲多個時間 626
19.5.6 是否該處理· 627
19.6 維護觸發器 628
19.6.1 禁用、啟用以及刪除
觸發器 628
19.6.2 創建一個禁用的觸發器 628
19.6.3 查看觸發器 629
19.6.4 檢查觸發器的有效性 630
第 20章 管理PL/SQL代碼 631
20.1 管理資料庫內的代碼 632
20.1.1 數據字典視圖概述 632
20.1.2 顯示存儲對象的信息 634
20.1.3 原始碼的顯示和搜尋 635
20.1.4 根據程式的大小確定Pinning
需求 637
20.1.5 獲得存儲代碼的屬性 637
20.1.6 通過視圖分析和更改觸發器
狀態 638
20.1.7 分析參數信息 639
20.1.8 分析標識符的使用(Oracle
資料庫11g的PL/Scope) 640
20.2 管理依賴關係及重編譯
代碼 643
20.2.1 通過數據字典視圖分析依賴
關係 643
20.2.2 細粒度依賴(Oracle
資料庫11g) 647
20.2.3 遠程依賴 648
20.2.4 Oracle的遠程調用模式的
限制 650
20.2.5 重編譯無效的程式單元 651
20.3 編譯時刻警告 655
20.3.1 一個快速示例 655
20.3.2 開啟編譯時刻告警 656
20.3.3 一些有用的警告 657
20.4 測試PL/SQL程式 664
20.4.1 典型的、華而不實的測試
技術 665
20.4.2 PL/SQL代碼測試的一般
建議 668
20.4.3 PL/SQL的自動測試選項 669
20.5 跟蹤PL/SQL的執行 670
20.5.1 DBMS_UTILITY.FORMAT_
CALL_STACK 671
20.5.2 UTL_CALL_STACK(Oracle
資料庫12c) 673
20.5.3 DBMS_APPLICATION_
INFO 676
20.5.4 使用opp_trace進行跟蹤 677
20.5.5 DBMS_TRACE工具包 678
20.6 PL/SQL程式的調試 681
20.6.1 錯誤的調試方法 682
20.6.2 調試技巧和策略 683
20.7 使用白名單來控制對程式
單元的訪問 687
20.8 存儲代碼的保護 689
20.8.1 封裝的約束和局限 690
20.8.2 使用封裝程式 690
20.8.3 使用DBMS_DDL進行動態
封裝 690
20.8.4 封裝代碼的使用指導 691
20.9 基於版本的重定義(Oracle
資料庫11g R2版本) 692
第 21章 PL/SQL的性能最佳化 695
21.1 輔助最佳化的工具 696
21.1.1 記憶體使用分析 696
21.1.2 發現PL/SQL代碼中的瓶頸 697
21.1.3 計算花費時間 701
21.1.4 選擇**快的程式 703
21.1.5 避免無限循環 704
21.1.6 性能相關的警告 706
21.2 最佳化編譯器 706
21.2.1 最佳化器工作原理 707
21.2.2 循環Fetch操作的運行
時最佳化 710
21.3 數據快取技術 710
21.3.1 基於包的快取 711
21.3.2 確定性函式的快取 716
21.3.3 函式結果快取(Oracle
資料庫11g) 718
21.3.4 快取總結 731
21.4 重複的SQL的語句批
處理 732
21.4.1 通過BULK COLLECT加速
查詢 733
21.4.2 使用FORALL加速DML 739
21.5 利用管道化的表函式提升
性能 749
21.5.1 用基於管道化函式的載入
方式替換基於行的插入 750
21.5.2 用管道函式調優Merge
操作 756
21.5.3 用並行管道函式進行異步
數據導出 758
21.5.4 並行管道函式中的分區和
流子句對性能的影響 761
21.5.5 管道函式和基於成本的
最佳化器 763
21.5.6 用管道函式最佳化負載的數據
載入 768
21.5.7 管道函式結束語 775
21.6 專用的最佳化技術 775
21.6.1 使用NOCOPY參數模式
提示符 775
21.6.2 使用正確的數據類型 778
21.6.3 SQL(12.1及更高版本)的
函式性能最佳化 779
21.7 性能回顧 780
第 22章 I/O操作和PL/SQL 781
22.1 顯示信息 781
22.1.1 啟用DBMS_OUTPUT 782
22.1.2 向快取中寫入行 782
22.1.3 從快取中讀取內容 783
22.2 檔案的讀寫 784
22.2.1 UTL_FILE_DIR參數 784
22.2.2 使用Oracle 786
22.2.3 打開檔案 787
22.2.4 檔案已經打開了嗎· 789
22.2.5 關閉檔案 789
22.2.6 讀取檔案 790
22.2.7 向檔案中寫 792
22.2.8 複製檔案 795
22.2.9 刪除檔案 795
22.2.10 改名和移動檔案 796
22.2.11 提取檔案屬性 797
22.3 傳送郵件 798
22.3.1 Oracle的前提條件 798
22.3.2 設定網路安全 799
22.3.3 傳送一個短的(小於32767字
節)的純文本訊息 799
22.3.4 在郵件地址中加上“界面友
好的”的名字 801
22.3.5 傳送任意長度的純文本
訊息 802
22.3.6 傳送帶有小附屬檔案(小於32767
位元組)的訊息 803
22.3.7 以附屬檔案形式傳送一個小檔案
(小於32767位元組) 805
22.3.8 任意大小的附屬檔案 805
22.4 使用基於Web的數據
(HTTP) 808
22.4.1 “分片”獲得一個Web頁面 808
22.4.2 把頁面提取到一個LOB中 809
22.4.3 使用HTTP的用戶名/密碼
驗證 810
22.4.4 獲取一個SSL加密的Web頁面
(使用HTTPS) 811
22.4.5 通過GET或者POST向Web頁
面提交數據 812
22.4.6 禁用cookie或者使cookie
持久化 816
22.4.7 從FTP伺服器獲取數據 816
22.4.8 使用代理伺服器 817
22.5 PL/SQL中可用的其他I/O
類型 817
22.5.1 資料庫管道、佇列、告警 817
22.5.2 TCPSocket 818
22.5.3 Oracle的內置Web伺服器 818
第6部分 **PL/SQL主題
第 23章 套用系統安全與
PL/SQL 821
23.1 安全概述 821
23.2 加密 822
23.2.1 密鑰長度 823
23.2.2 算法 824
23.2.3 填補和連線 825
23.2.4 DBMS_CRYPTO包 825
23.2.5 數據加密 827
23.2.6 LOB的加密 830
23.2.7 安全檔案 830
23.2.8 數據解密 831
23.2.9 生成密鑰 832
23.2.10 密鑰的管理 833
23.2.11 加密哈希 838
23.2.12 使用訊息驗證碼 839
23.2.13 使用透明數據加密
(TDE) 841
23.2.14 透明的表空間加密 843
23.3 行級安全 844
23.3.1 為什麼要學習RLS 846
23.3.2 一個簡單的RLS示例 847
23.3.3 靜態與動態策略 850
23.3.4 使用列敏感的RLS 854
23.3.5 RLS調試 857
23.4 應用程式上下文 861
23.4.1 使用應用程式上下文 862
23.4.2 上下文的安全 863
23.4.3 把上下文用作RLS的謂詞
條件 863
23.4.4 識別出非資料庫的用戶 867
23.5 細粒度審計 868
23.5.1 為什麼要學習FGA 869
23.5.2 一個簡單的FGA示例 870
23.5.3 訪問多少列 872
23.5.4 查看審計跟蹤信息 873
23.5.5 使用綁定變數 874
23.5.6 使用句柄模組 875
第 24章 PL/SQL架構 877
24.1 DIANA 877
24.2 Oracle如何執行PL/SQL
代碼 878
24.2.1 一個示例 879
24.2.2 編譯器的限制 881
24.3 PL/SQL的預設包 882
24.4 執行許可權模型 884
24.4.1 定義者許可權模型 885
24.4.2 調用者許可權模型 889
24.4.3 組合許可權模型 891
24.4.4 給PL/SQL程式單元授予角色
(Oracle資料庫12c) 892
24.4.5 “誰調用了我·”函式
(Oracle資料庫12c) 895
24.4.6 視圖的BEQUEATH CURRENT_
USER子句(Oracle資料庫
12c) 895
24.4.7 調用者許可權優點的限制
(Oracle資料庫12c) 897
24.5 條件編譯 898
24.5.1 條件編譯的示例 899
24.5.2 查詢指令 900
24.5.3 $IF指令 903
24.5.4 $ERROR指令 904
24.5.5 將代碼與包常量同步 905
24.5.6 用查詢指令實現程式專有
設定 906
24.5.7 使用預處理後的代碼 907
24.6 PL/SQL和資料庫實例
記憶體 908
24.6.1 SGA、PGA和UGA 908
24.6.2 游標、記憶體及其他 909
24.6.3 減少記憶體使用的技巧 910
24.6.4 記憶體用光了怎么辦 920
24.7 原生式編譯 922
24.7.1 什麼時候使用解釋模式 922
24.7.2 什麼時候使用原生模式 922
24.7.3 原生編譯和資料庫版本 923
24.8 一些須知 923
第 25章 PL/SQL的全球化和
本地化 925
25.1 概述和術語 926
25.2 Unicode入門 928
25.2.1 國家字元集的數據類型 929
25.2.2 字元編碼 929
25.2.3 和全球化支持相關的參數 930
25.2.4 Unicode函式 931
25.3 字元語義 938
25.4 字元串排序順序 941
25.4.1 二進制排序 942
25.4.2 單語言排序 943
25.4.3 多語言排序 945
25.5 多語言信息檢索 946
25.5.1 信息檢索和PL/SQL 948
25.6 日期/時間 950
25.6.1 時間戳數據類型 951
25.6.2 日期/時間格式 952
25.7 貨幣轉換 955
25.8 PL/SQL的全球化開發
工具箱 957
25.8.1 UTL_I18N工具包 957
25.8.2 UTL_LMS異常處理包 960
25.8.3 GDK實現選項 961
第 26章 PL/SQL的面向對象
特性 963
26.1 Oracle對象特性的介紹 963
26.2 對象類型示例 965
26.2.1 創建一個基類 966
26.2.2 創建子類型 967
26.2.3 方法 968
26.2.4 在Oracle資料庫11g及以後
版本中調用父類的方法 972
26.2.5 保存、提取、使用持久化
對象 974
26.2.6 演變和創建 981
26.2.7 回到指針嗎· 983
26.2.8 泛化數據:ANY類型 989
26.2.9 我們自己做 993
26.2.10 對象的比較 996
26.3 對象視圖 1001
26.3.1 一個關係型系統的示例 1002
26.3.2 帶有集合屬性的對象視圖 1003
26.3.3 對象子視圖 1006
26.3.4 帶有反關係的對象視圖 1008
26.3.5 INSTEAD OF觸發器 1008
26.3.6 對象視圖和對象表的區別 1010
26.4 維護對象類型和對象視圖 1012
26.4.1 數據字典 1012
26.4.2 許可權 1013
26.5 來自一個關係***的總結
思考(C551, E1200) 1015
第 27章 從PL/SQL中調用
Java 1017
27.1 Oracle和Java 1017
27.2 準備好在Oracle中使用
Java 1018
27.2.1 安裝Java 1019
27.2.2 創建和編譯我們的Java
代碼 1019
27.2.3 設定Java開發和執行的
許可權 1020
27.3 一個簡單的演示 1022
27.3.1 查找Java功能 1023
27.3.2 創建一個自定義Java類 1023
27.3.3 編譯和載入到Oracle 1025
27.3.4 創建一個PL/SQL的
包裝器 1026
27.3.5 從PL/SQL刪除檔案 1027
27.4 使用loadjava 1028
27.5 使用dropjava 1030
27.6 管理資料庫中的Java 1030
27.6.1 Oracle中的Java命名空間 1030
27.6.2 檢查載入的Java元素 1031
27.7 使用DBMS_JAVA 1032
27.7.1 LONGNAME:轉換Java
長名字 1032
27.7.2 GET_、SET_和RESET_
COMPILER_OPTION:
得到和設定(一些)
編譯器選項 1033
27.7.3 SET_OUTPUT:允許從
Java中輸出 1034
27.7.4 EXPORT_SOURCE、EXPORT_
RESOURCE和EXPORT_
CLASS:導出模式對象 1034
27.8 在PL/SQL中發布與
使用Java 1036
27.8.1 調用規範 1036
27.8.2 一些調用規範的規則 1037
27.8.3 映射數據類型 1038
27.8.4 在SQL中調用Java方法 1039
27.8.5 Java的異常處理 1040
27.8.6 擴展檔案I/O功能 1042
27.8.7 其他示例 1046
第 28章 外部過程 1049
28.1 外部過程介紹 1050
28.1.1 示例:調用一個系統命令 1050
28.1.2 外部過程的架構 1052
28.2 Oracle網路配置 1053
28.2.1 定義監聽配置 1053
28.2.2 配置的安全特性 1055
28.3 設定多執行緒模式 1056
28.4 創建一個Oracle庫 1058
28.5 編寫調用規範 1059
28.5.1 調用規範:整體語法 1060
28.5.2 參數映射:示例重溫 1061
28.5.3 參數映射:完整的內容 1063
28.5.4 更多的語法:參數子句 1064
28.5.5 參數屬性 1065
28.6 從調用的C程式中引發
一個異常 1068
28.7 非默認的代理 1071
28.8 維護外部過程 1073
28.8.1 刪除庫 1073
28.8.2 數據字典 1074
28.8.3 規則和警示 1074
附錄A 正則表達式元字元和函式
參數 1075
附錄B 數字格式模型 1080
附錄C 日期格式模型 1083
2.4.1 創建存儲程式 31
2.4.2 執行存儲的程式 33
2.4.3 顯示存儲程式 34
2.4.4 存儲程式的授權和別名 35
2.4.5 刪除一個存儲程式 36
2.4.6 隱藏存儲程式的原始碼 36
2.5 編輯PL/SQL的環境 37
2.6 從其他語言中調用PL/SQL 37
2.6.1 C語言,使用Oracle預編輯器
(Pro*C) 38
2.6.2 Java:使用JDBC 39
2.6.3 Perl:使用Perl DBI和DBD::
Oracle 40
2.6.4 PHP:使用Oracle擴展 41
2.6.5 PL/SQL Server Pages 42
2.6.6 其他 43
第3章 語言基礎 44
3.1 PL/SQL塊結構 44
3.1.1 匿名塊 46
3.1.2 命名塊 47
3.1.3 嵌套塊 47
3.1.4 作用範圍 48
3.1.5 規範SQL語句中對變數和
列的引用 49
3.1.6 可見性 51
3.2 PL/SQL字元集 54
3.3 標識符 56
3.3.1 保留字 57
3.3.2 空白和關鍵字 58
3.4 直接量 59
3.4.1 NULL 60
3.4.2 在一個直接量字元串中嵌入
單引號 61
3.4.3 數字直接量 61
3.4.4 布爾直接量 62
3.5 分號分隔設定 62
3.6 注釋 63
3.6.1 單行注釋語法 63
3.6.2 多行注釋語法 63
3.7 PRAGMA關鍵字 64
3.8 標籤 65
第 2部分 PL/SQL程式結構
第4章 條件與順序控制 69
4.1 IF語句 69
4.1.1 IF-THEN組合 69
4.1.2 IF-THEN-ELSE的組合 71
4.1.3 IF-THEN-ELSIF組合 73
4.1.4 避免IF語法陷阱 73
4.1.5 嵌套的IF語句 75
4.1.6 短路估算 75
4.2 CASE語句和表達式 77
4.2.1 簡單的CASE語句 77
4.2.2 搜尋CASE語句 79
4.2.3 嵌套CASE語句 81
4.2.4 CASE表達式 81
4.3 GOTO語句 83
4.4 NULL語句 84
4.4.1 提高程式的可讀性 84
4.4.2 在標籤後使用NULL 84
第5章 循環疊代處理 86
5.1 循環的基礎知識 86
5.1.1 不同循環的示例 86
5.1.2 PL/SQL循環的結構 88
5.2 簡單循環 89
5.2.1 終止簡單循環:EXIT
和EXIT WHEN 89
5.2.2 模仿REPEAT UNTIL循環 90
5.2.3 故意的無限循環 91
5.3 WHILE循環 92
5.4 數值型FOR循環 93
5.4.1 數值型FOR循環的規則 94
5.4.2 數值型FOR循環的示例 94
5.4.3 處理特殊增量 95
5.5 游標FOR循環 96
5.5.1 游標FOR循環的示例 97
5.6 循環標籤 98
5.7 CONTINUE語句 99
5.8 疊代處理技巧 102
5.8.1 為循環索引使用可理解的
名稱 102
5.8.2 以正確的方式說再見 102
5.8.3 獲取FOR循環執行的信息 103
5.8.4 循環SQL語句 104
第6章 異常處理 106
6.1 異常處理概念和術語 106
6.2 定義異常 108
6.2.1 聲明命名異常 108
6.2.2 關聯異常名稱與錯誤代碼 109
6.2.3 命名的系統異常 112
6.2.4 異常作用範圍 114
6.3 引發異常 115
6.3.1 RAISE語句 115
6.3.2 使用RAISE_APPLICATION_
ERROR 116
6.4 處理異常 117
6.4.1 內置錯誤函式 118
6.4.2 單一處理句柄中結合多個
異常 122
6.4.3 未處理異常 123
6.4.4 未處理異常的傳播 123
6.4.5 繼續過去的異常 125
6.4.6 編寫WHEN OTHERS處理
代碼 127
6.5 構建有效的錯誤管理架構 129
6.5.1 確定我們的異常管理策略 129
6.5.2 對不同類型異常進行標準化
處理 130
6.5.3 程式特定錯誤代碼的組織
使用 133
6.5.4 使用標準的錯誤管理程式 133
6.5.5 使用自己的異常“對象” 135
6.5.6 創建常見錯誤處理的標準
模板 137
6.6 充分利用PL/SQL錯誤
管理 138
第3部分 PL/SQL程式數據
第7章 使用程式數據 141
7.1 程式數據的命名 141
7.2 PL/SQL數據類型概述 143
7.2.1 字元數據 143
7.2.2 數字 144
7.2.3 日期、時間戳和時間間隔 145
7.2.4 布爾類型 145
7.2.5 二進制數據類型 146
7.2.6 ROWID 146
7.2.7 REF CURSOR 146
7.2.8 Internet數據類型 147
7.2.9 “Any”數據類型 147
7.2.10 用戶自定義數據類型 147
7.3 程式數據的聲明 147
7.3.1 聲明一個變數 148
7.3.2 聲明常量 148
7.3.3 NOT NULL語句 149
7.3.4 錨定聲明 149
7.3.5 游標和表的錨 151
7.3.6 使用錨定聲明的益處 152
7.3.7 NOT NULL數據類型的錨 153
7.4 程式設計師定義的子類型 153
7.5 數據類型轉換 154
7.5.1 隱式類型轉換 155
7.5.2 顯式類型轉換 156
第8章 字元串 162
8.1 字元串類型 162
8.1.1 VARCHAR2數據類型 163
8.1.2 CHAR數據類型 164
8.1.3 String子類型 164
8.2 使用字元串 165
8.2.1 指定字元串常量 165
8.2.2 不可列印字元 167
8.2.3 拼接字元串 168
8.2.4 處理大小寫 169
8.2.5 傳統的檢索、提取和替換 172
8.2.6 填充 174
8.2.7 剪裁 176
8.2.8 正則表達式的檢索、提取和
替換 177
8.2.9 使用空字元串 187
8.2.10 混用CHAR和
VARCHAR2 188
8.3 字元串函式快速參考 190
第9章 數字 199
9.1 數值型數字類型 199
9.1.1 NUMBER類型 200
9.1.2 PLS_INTEGER類型 204
9.1.3 BINARY_INTEGER類型 205
9.1.4 SIMPLE_INTEGER類型 205
9.1.5 BINARY_FLOAT和
BINARY_DOUBLE類型 207
9.1.6 SIMPLE_FLOAT和
SIMPLE_DOUBLE類型 212
9.1.7 數字子類型 212
9.2 數字轉換 213
9.2.1 TO_NUMBER函式 213
9.2.2 TO_CHAR函式 216
9.2.3 CAST函式 221
9.2.4 隱式轉換 222
9.3 數字運算符 224
9.4 數字函式 224
9.4.1 四捨五入和截斷函式 224
9.4.2 三角函式 225
9.4.3 數字函式的快速參考 225
第 10章 日期和時間戳 230
10.1 Datetime數據類型 230
10.1.1 聲明日期時間變數 233
10.1.2 選擇日期時間數據類型 233
10.2 獲取當前日期和時間 234
10.3 INTERVAL數據類型 236
10.3.1 聲明INTERVAL變數 237
10.3.2 什麼時候使用INTERVAL 238
10.4 日期時間轉換 240
10.4.1 從字元串到日期時間 240
10.4.2 從日期時間到字元串 242
10.4.3 使用時區 245
10.4.4 **匹配需要格式掩碼 247
10.4.5 讓**匹配更輕鬆 248
10.4.6 解釋滑動視窗中兩位數字的
年份 248
10.4.7 把時區轉換成字元串 249
10.4.8 用填充模式把輸出補齊 250
10.5 日期和時間戳直接量 251
10.6 時間間隔的轉換 252
10.6.1 從數字到時間間隔的轉換 252
10.6.2 把字元串轉換成間隔 253
10.6.3 時間間隔的格式化顯示 254
10.7 時間間隔直接量 254
10.8 CAST和EXTRACT 256
10.8.1 CAST函式 256
10.8.2 EXTRACT函式 258
10.9 日期時間的算法 258
10.9.1 時間間隔和日期時間的
算法 259
10.9.2 DATE數據類型的日期
算法 260
10.9.3 計算兩個日期時間之間的
時間間隔 260
10.9.4 DATE和TIMESTAMP混合
計算 262
10.9.5 時間間隔的加減運算 263
10.9.6 時間間隔的乘除運算 264
10.9.7 使用不受限制的時間間隔
類型 264
10.10 日期/時間函式的快速
參考 266
第 11章 記錄類型 269
11.1 PL/SQL中的記錄 269
11.1.1 使用記錄的好處 270
11.1.2 聲明記錄 271
11.1.3 程式設計師自定義的記錄類型 273
11.1.4 使用記錄類型 275
11.1.5 記錄的比較 281
11.1.6 觸發器偽記錄 282
第 12章 集合 284
12.1 集合概述 285
12.1.1 集合概念和術語 285
12.1.2 集合類型 287
12.1.3 集合示例 288
12.1.4 使用集合的場合 291
12.1.5 選擇一個集合類型 296
12.2 集合方法(內置) 297
12.2.1 COUNT方法 298
12.2.2 DELETE方法 299
12.2.3 EXISTS方法 300
12.2.4 EXTEND方法 300
12.2.5 FIRST和LAST方法 301
12.2.6 LIMIT方法 302
12.2.7 PRIOR和NEXT方法 303
12.2.8 TRIM方法 304
12.3 使用集合 305
12.3.1 聲明集合類型 306
12.3.2 集合變數的聲明和初始化 310
12.3.3 用數據填充集合 313
12.3.4 訪問集合內的數據 318
12.3.5 使用字元串索引的集合 319
12.3.6 複雜數據類型的集合 324
12.3.7 多級集合 327
12.3.8 在SQL中使用集合 335
12.4 嵌套表的多重集合操作 342
12.4.1 測試嵌套表是否相等及成員
歸屬 343
12.4.2 檢查元素是否是嵌套表的
成員 344
12.4.3 執行**別集合操作 345
12.4.4 嵌套表中的去重 346
12.5 schema級別集合的維護 347
12.5.1 必需的許可權 347
12.5.2 集合和數據字典 348
第 13章 其他數據類型 349
13.1 BOOLEAN類型 349
13.2 RAW數據類型 350
13.3 UROWID和ROWID數據
類型 351
13.3.1 獲取ROWID 352
13.3.2 使用ROWID 352
13.4 LOB數據類型 353
13.5 使用LOB 354
13.5.1 理解LOB定位符 356
13.5.2 LOB的空和NULL 357
13.5.3 向LOB中寫入數據 359
13.5.4 讀取LOB數據 361
13.5.5 BFILE的不同之處 363
13.5.6 SecureFiles和BasicFiles 367
13.5.7 臨時LOB 369
13.5.8 原生的LOB操作 372
13.5.9 LOB轉換函式 376
13.6 預定義的對象類型 376
13.6.1 XMLType類型 376
13.6.2 URI類型 379
13.6.3 Any類型 381
第4部分 PL/SQL中的SQL
第 14章 DML和事務管理 387
14.1 PL/SQL中的DML 388
14.1.1 DML簡介 388
14.1.2 DML操作符的游標屬性 391
14.1.3 從DML語句返回信息 392
14.1.4 DML和異常處理 393
14.1.5 DML和記錄 394
14.2 事務管理 397
14.2.1 COMMIT語句 397
14.2.2 ROLLBACK語句 398
14.2.3 SAVEPOINT語句 399
14.2.4 SET TRANSACTION語句 399
14.2.5 LOCK TABLE語句 400
14.3 自治事務 400
14.3.1 定義自治事務 401
14.3.2 自治事務的規則和限制 402
14.3.3 事務的可見性 403
14.3.4 何時使用自治事務 403
14.3.5 創建自治日誌記錄機制 404
第 15章 數據提取 407
15.1 游標基礎 408
15.1.1 一些數據提取術語 408
15.1.2 典型的查詢操作 410
15.1.3 游標屬性介紹 411
15.1.4 在游標中引用PL/SQL
變數 413
15.1.5 顯式與隱式游標之間的
選擇 414
15.2 使用隱式游標 414
15.2.1 隱式游標示例 415
15.2.2 隱式游標的異常處理 416
15.2.3 隱式SQL游標的屬性 418
15.3 使用顯式游標 419
15.3.1 聲明顯式游標 420
15.3.2 打開顯式游標 423
15.3.3 從顯式游標獲取 424
15.3.4 顯式游標中的列別名 425
15.3.5 關閉顯式游標 426
15.3.6 顯式游標屬性 427
15.3.7 游標參數 429
15.4 SELECT…FOR UPDATE 432
15.4.1 COMMIT釋放鎖定 433
15.4.2 WHERE CURRENT
OF子句 434
15.5 游標變數和REF
CURSOR 435
15.5.1 為什麼使用游標變數 436
15.5.2 與靜態游標的相似之處 437
15.5.3 聲明REF CURSOR類型 437
15.5.4 聲明游標變數 438
15.5.5 打開游標變數 439
15.5.6 從游標變數中提取數據 440
15.5.7 游標變數的使用規則 442
15.5.8 將游標變數作為參數傳遞 445
15.5.9 游標變數的約束限制 447
15.6 游標表達式 447
15.6.1 使用游標表達式 448
15.6.2 游標表達式的約束限制 450
第 16章 動態SQL和動態
PL/SQL 451
16.1 NDS語句 452
16.1.1 EXECUTE IMMEDIATE
語句 452
16.1.2 OPEN FOR語句 455
16.1.3 4種動態SQL方法 460
16.2 綁定變數 462
16.2.1 參數模式 463
17.9 將模組化進行到底 547
第 18章 程式包 548
18.1 為什麼使用程式包 548
18.1.1 演示程式包的能力 549
18.1.2 與程式包相關的一些概念 552
18.1.3 圖示私有性 553
18.2 構建程式包的規則 554
18.2.1 程式包說明 554
18.2.2 包體 555
18.2.3 包的初始化 557
18.3 包元素的調用規則 561
18.4 使用包數據 562
18.4.1 在一個Oracle會話內全局
可見 562
18.4.2 全局公有數據 563
18.4.3 包游標 563
18.4.4 包的串列化 568
18.5 何時使用包 570
18.5.1 封裝對數據的訪問 570
18.5.2 避免直接量的硬編碼 573
18.5.3 提高內置特性的可用性 575
18.5.4 把邏輯上相關的功能組織
在一起 576
18.5.5 快取靜態的會話數據 576
18.6 包和對象類型 577
第 19章 觸發器 578
19.1 DML觸發器 579
19.1.1 DML觸發器的概念 580
19.1.2 創建DML觸發器 581
19.1.3 DML觸發器的例子:嚴禁
作弊! 586
19.1.4 同一類型的多個觸發器 591
19.1.5 如何對觸發順序排序 592
19.1.6 突變表的錯誤 594
19.1.7 複合觸發器:聚在一處 595
19.2 DDL觸發器 598
19.2.1 創建DDL觸發器 598
19.2.2 可用事件 600
19.2.3 可用屬性 601
19.2.4 使用事件和屬性 602
19.2.5 刪除不可刪除的 606
19.2.6 INSTEAD OFCREATE
觸發器 606
19.3 資料庫事件觸發器 607
19.3.1 創建資料庫事件觸發器 608
19.3.2 STARTUP觸發器 609
19.3.3 SHUTDOWN觸發器 610
19.3.4 LOGON觸發器 610
19.3.5 LOGOFF觸發器 610
19.3.6 SERVERERROR觸發器 611
19.4 INSTEAD OF觸發器 615
19.4.1 創建INSTEAD OF觸發器 615
19.4.2 INSTEAD OF INSERT
觸發器 616
19.4.3 INSTEAD OF UPDATE
觸發器 618
19.4.4 INSTEAD OF DELETE
觸發器 619
19.4.5 填充表 619
19.4.6 嵌套表的lNSTEAD OF
觸發器 620
19.5 AFTER SUSPEND觸發器 621
19.5.1 建立AFTER SUSPEND
觸發器 622
19.5.2 看看真實的觸發器 623
19.5.3 ORA_SPACE_ERROR_lNFO
函式 624
19.5.4 DBMS_RESUMABLE包 625
19.5.5 捕獲多個時間 626
19.5.6 是否該處理· 627
19.6 維護觸發器 628
19.6.1 禁用、啟用以及刪除
觸發器 628
19.6.2 創建一個禁用的觸發器 628
19.6.3 查看觸發器 629
19.6.4 檢查觸發器的有效性 630
第 20章 管理PL/SQL代碼 631
20.1 管理資料庫內的代碼 632
20.1.1 數據字典視圖概述 632
20.1.2 顯示存儲對象的信息 634
20.1.3 原始碼的顯示和搜尋 635
20.1.4 根據程式的大小確定Pinning
需求 637
20.1.5 獲得存儲代碼的屬性 637
20.1.6 通過視圖分析和更改觸發器
狀態 638
20.1.7 分析參數信息 639
20.1.8 分析標識符的使用(Oracle
資料庫11g的PL/Scope) 640
20.2 管理依賴關係及重編譯
代碼 643
20.2.1 通過數據字典視圖分析依賴
關係 643
20.2.2 細粒度依賴(Oracle
資料庫11g) 647
20.2.3 遠程依賴 648
20.2.4 Oracle的遠程調用模式的
限制 650
20.2.5 重編譯無效的程式單元 651
20.3 編譯時刻警告 655
20.3.1 一個快速示例 655
20.3.2 開啟編譯時刻告警 656
20.3.3 一些有用的警告 657
20.4 測試PL/SQL程式 664
20.4.1 典型的、華而不實的測試
技術 665
20.4.2 PL/SQL代碼測試的一般
建議 668
20.4.3 PL/SQL的自動測試選項 669
20.5 跟蹤PL/SQL的執行 670
20.5.1 DBMS_UTILITY.FORMAT_
CALL_STACK 671
20.5.2 UTL_CALL_STACK(Oracle
資料庫12c) 673
20.5.3 DBMS_APPLICATION_
INFO 676
20.5.4 使用opp_trace進行跟蹤 677
20.5.5 DBMS_TRACE工具包 678
20.6 PL/SQL程式的調試 681
20.6.1 錯誤的調試方法 682
20.6.2 調試技巧和策略 683
20.7 使用白名單來控制對程式
單元的訪問 687
20.8 存儲代碼的保護 689
20.8.1 封裝的約束和局限 690
20.8.2 使用封裝程式 690
20.8.3 使用DBMS_DDL進行動態
封裝 690
20.8.4 封裝代碼的使用指導 691
20.9 基於版本的重定義(Oracle
資料庫11g R2版本) 692
第 21章 PL/SQL的性能最佳化 695
21.1 輔助最佳化的工具 696
21.1.1 記憶體使用分析 696
21.1.2 發現PL/SQL代碼中的瓶頸 697
21.1.3 計算花費時間 701
21.1.4 選擇**快的程式 703
21.1.5 避免無限循環 704
21.1.6 性能相關的警告 706
21.2 最佳化編譯器 706
21.2.1 最佳化器工作原理 707
21.2.2 循環Fetch操作的運行
時最佳化 710
21.3 數據快取技術 710
21.3.1 基於包的快取 711
21.3.2 確定性函式的快取 716
21.3.3 函式結果快取(Oracle
資料庫11g) 718
21.3.4 快取總結 731
21.4 重複的SQL的語句批
處理 732
21.4.1 通過BULK COLLECT加速
查詢 733
21.4.2 使用FORALL加速DML 739
21.5 利用管道化的表函式提升
性能 749
21.5.1 用基於管道化函式的載入
方式替換基於行的插入 750
21.5.2 用管道函式調優Merge
操作 756
21.5.3 用並行管道函式進行異步
數據導出 758
21.5.4 並行管道函式中的分區和
流子句對性能的影響 761
21.5.5 管道函式和基於成本的
最佳化器 763
21.5.6 用管道函式最佳化負載的數據
載入 768
21.5.7 管道函式結束語 775
21.6 專用的最佳化技術 775
21.6.1 使用NOCOPY參數模式
提示符 775
21.6.2 使用正確的數據類型 778
21.6.3 SQL(12.1及更高版本)的
函式性能最佳化 779
21.7 性能回顧 780
第 22章 I/O操作和PL/SQL 781
22.1 顯示信息 781
22.1.1 啟用DBMS_OUTPUT 782
22.1.2 向快取中寫入行 782
22.1.3 從快取中讀取內容 783
22.2 檔案的讀寫 784
22.2.1 UTL_FILE_DIR參數 784
22.2.2 使用Oracle 786
22.2.3 打開檔案 787
22.2.4 檔案已經打開了嗎· 789
22.2.5 關閉檔案 789
22.2.6 讀取檔案 790
22.2.7 向檔案中寫 792
22.2.8 複製檔案 795
22.2.9 刪除檔案 795
22.2.10 改名和移動檔案 796
22.2.11 提取檔案屬性 797
22.3 傳送郵件 798
22.3.1 Oracle的前提條件 798
22.3.2 設定網路安全 799
22.3.3 傳送一個短的(小於32767字
節)的純文本訊息 799
22.3.4 在郵件地址中加上“界面友
好的”的名字 801
22.3.5 傳送任意長度的純文本
訊息 802
22.3.6 傳送帶有小附屬檔案(小於32767
位元組)的訊息 803
22.3.7 以附屬檔案形式傳送一個小檔案
(小於32767位元組) 805
22.3.8 任意大小的附屬檔案 805
22.4 使用基於Web的數據
(HTTP) 808
22.4.1 “分片”獲得一個Web頁面 808
22.4.2 把頁面提取到一個LOB中 809
22.4.3 使用HTTP的用戶名/密碼
驗證 810
22.4.4 獲取一個SSL加密的Web頁面
(使用HTTPS) 811
22.4.5 通過GET或者POST向Web頁
面提交數據 812
22.4.6 禁用cookie或者使cookie
持久化 816
22.4.7 從FTP伺服器獲取數據 816
22.4.8 使用代理伺服器 817
22.5 PL/SQL中可用的其他I/O
類型 817
22.5.1 資料庫管道、佇列、告警 817
22.5.2 TCPSocket 818
22.5.3 Oracle的內置Web伺服器 818
第6部分 **PL/SQL主題
第 23章 套用系統安全與
PL/SQL 821
23.1 安全概述 821
23.2 加密 822
23.2.1 密鑰長度 823
23.2.2 算法 824
23.2.3 填補和連線 825
23.2.4 DBMS_CRYPTO包 825
23.2.5 數據加密 827
23.2.6 LOB的加密 830
23.2.7 安全檔案 830
23.2.8 數據解密 831
23.2.9 生成密鑰 832
23.2.10 密鑰的管理 833
23.2.11 加密哈希 838
23.2.12 使用訊息驗證碼 839
23.2.13 使用透明數據加密
(TDE) 841
23.2.14 透明的表空間加密 843
23.3 行級安全 844
23.3.1 為什麼要學習RLS 846
23.3.2 一個簡單的RLS示例 847
23.3.3 靜態與動態策略 850
23.3.4 使用列敏感的RLS 854
23.3.5 RLS調試 857
23.4 應用程式上下文 861
23.4.1 使用應用程式上下文 862
23.4.2 上下文的安全 863
23.4.3 把上下文用作RLS的謂詞
條件 863
23.4.4 識別出非資料庫的用戶 867
23.5 細粒度審計 868
23.5.1 為什麼要學習FGA 869
23.5.2 一個簡單的FGA示例 870
23.5.3 訪問多少列 872
23.5.4 查看審計跟蹤信息 873
23.5.5 使用綁定變數 874
23.5.6 使用句柄模組 875
第 24章 PL/SQL架構 877
24.1 DIANA 877
24.2 Oracle如何執行PL/SQL
代碼 878
24.2.1 一個示例 879
24.2.2 編譯器的限制 881
24.3 PL/SQL的預設包 882
24.4 執行許可權模型 884
24.4.1 定義者許可權模型 885
24.4.2 調用者許可權模型 889
24.4.3 組合許可權模型 891
24.4.4 給PL/SQL程式單元授予角色
(Oracle資料庫12c) 892
24.4.5 “誰調用了我·”函式
(Oracle資料庫12c) 895
24.4.6 視圖的BEQUEATH CURRENT_
USER子句(Oracle資料庫
12c) 895
24.4.7 調用者許可權優點的限制
(Oracle資料庫12c) 897
24.5 條件編譯 898
26.3.2 帶有集合屬性的對象視圖 1003
26.3.3 對象子視圖 1006
26.3.4 帶有反關係的對象視圖 1008
26.3.5 INSTEAD OF觸發器 1008
26.3.6 對象視圖和對象表的區別 1010
26.4 維護對象類型和對象視圖 1012
26.4.1 數據字典 1012
26.4.2 許可權 1013
26.5 來自一個關係***的總結
思考(C551, E1200) 1015
第 27章 從PL/SQL中調用
Java 1017
27.1 Oracle和Java 1017
27.2 準備好在Oracle中使用
Java 1018
27.2.1 安裝Java 1019
27.2.2 創建和編譯我們的Java
代碼 1019
27.2.3 設定Java開發和執行的
許可權 1020
27.3 一個簡單的演示 1022
27.3.1 查找Java功能 1023
27.3.2 創建一個自定義Java類 1023
27.3.3 編譯和載入到Oracle 1025
27.3.4 創建一個PL/SQL的
包裝器 1026
27.3.5 從PL/SQL刪除檔案 1027
27.4 使用loadjava 1028
27.5 使用dropjava 1030
27.6 管理資料庫中的Java 1030
27.6.1 Oracle中的Java命名空間 1030
27.6.2 檢查載入的Java元素 1031
27.7 使用DBMS_JAVA 1032
27.7.1 LONGNAME:轉換Java
長名字 1032
27.7.2 GET_、SET_和RESET_
COMPILER_OPTION:
得到和設定(一些)
編譯器選項 1033
27.7.3 SET_OUTPUT:允許從
Java中輸出 1034
27.7.4 EXPORT_SOURCE、EXPORT_
RESOURCE和EXPORT_
CLASS:導出模式對象 1034
27.8 在PL/SQL中發布與
使用Java 1036
27.8.1 調用規範 1036
27.8.2 一些調用規範的規則 1037
27.8.3 映射數據類型 1038
27.8.4 在SQL中調用Java方法 1039
27.8.5 Java的異常處理 1040
27.8.6 擴展檔案I/O功能 1042
27.8.7 其他示例 1046