Oracle PL/SQL 程序設計, 6/e (套裝共2冊) (Oracle PL/SQL Programming, 6/e) Oracle PL/SQL程序设计(第6版)(套装共2册)

史蒂芬·弗伊爾斯坦 (Steven Feuerstein), 比爾·普里比爾 (Bill Pribyl)

立即出貨 (庫存 < 4)

買這商品的人也買了...

商品描述

《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數據庫管理員等相關數據庫從業人員,也可以作為各大、中專院校相關專業師生的參考用書和相關培訓機構的培訓教材。

作者簡介

作者:[美]史蒂芬弗伊爾斯坦(Steven Feuerstein)、比爾普里比爾(Bill Pribyl)譯者:方鑫

Steven Feuerstein被尊為Oracle PL/SQL語言的世界ji專家領袖。他是本書上一版、Oracle PL/SQL Best Practices、Oracle PL/SQL Programming: Guide to Oracle8i Features、Oracle PL/SQL Developer's Workbook、Oracle Built-in Package、Advanced Oracle PL/SQL Programming with Packages以及多本口袋參考書(均由O'Reilly Media出版)的作者或合著者。Steven還是Quest Software的zi深技術顧問,從1980年就開始從事軟件的開發工作,並於1987~1992年在Oracle公司工作。
Bill Pribyl是Learning Oracle PL/SQL的主要作者、本書上一版以及配套口袋參考書(均由O'Reilly Media出版)的合著者。目前他在一家國際貿易公司內擔任一個編程小組的負責人。Bill曾經使用PL/SQL編寫TCP/IP網絡客戶端、tnsping呼出工具、近於實時的商品價格加載器以及超越函數等。Bill擁有Rice大學的物理學學位。在業餘時間裡,Bill的大部分精力都用來照顧罹患炎性乳腺癌的妻子。

目錄大綱

(上)
 

第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:使用PerlDBI和DBD::Oracle 40 
2.6.4 PHP:使用Oracle擴展41 
2.6.5 PL/SQLServerPages 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和EXITWHEN 89 
5.2.2模仿REPEATUNTIL循環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編寫WHENOTHERS處理代碼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 REFCURSOR 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 NOTNULL語句149 
7.3.4錨定聲明149 
7.3.5游標和表的錨151 
7.3.6使用錨定聲明的益處152 
7.3.7 NOTNULL數據類型的錨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和VARCHAR2188 
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 SETTRANSACTION語句399 
14.2.5 LOCKTABLE語句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…FORUPDATE 432 
15.4.1 COMMIT釋放鎖定433 
15.4.2 WHERECURRENTOF子句434 
15.5游標變量和REFCURSOR 435 
15.5.1為什麼使用游標變量436 
15.5.2與靜態游標的相似之處437 
15.5.3聲明REFCURSOR類型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 EXECUTEIMMEDIATE語句452 
16.1.2 OPENFOR語句455 
16.1.34種動態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 INSTEADOFCREATE觸發器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 INSTEADOF觸發器615 
19.4.1創建INSTEADOF觸發器615 
19.4.2 INSTEADOFINSERT觸發器616 
19.4.3 INSTEADOFUPDATE觸發器618 
19.4.4 INSTEADOFDELETE觸發器619 
19.4.5填充表619 
19.4.6嵌套表的lNSTEADOF觸發器620 
19.5 AFTERSUSPEND觸發器621 
19.5.1建立AFTERSUSPEND觸發器622 
19.5.2看看真實的觸發器623 
19.5.3 ORA_SPACE_ERROR_INFO函數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數據庫11gR2版本) 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通過BULKCOLLECT加速查詢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視圖的BEQUEATHCURRENT_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 INSTEADOF觸發器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