關于我們
書單推薦
新書推薦
|
Oracle PL/SQL程序設計
本書基于Oracle數據庫12C, 從用PL/SQL編程、PL/SQL程序結構、PL/SQL程序數據、PL/SQL中的SQL、構造PL/SQL應用程序、高級PL/SQL主題這6個方面詳細而系統(tǒng)地討論了PL/SQL以及如何有效地使用它。本書能夠幫助你充分利用PL/SQL來解決數據庫開發(fā)中遇到的各種問題, 引導你掌握各種構建應用的技巧和技術, 以便使你編寫出高效、可維護的代碼。本書不但介紹了大量Oracle數據庫12C的PL/SQL新性能, 還提供了許多優(yōu)化PL/SQL性能的新方法。
本書在Oracle社區(qū)中被公認為是zui好的Oracle PL/SQL程序設計權V指南。如果想要充分利用PL/SQL,本書無疑是**的資源。本書第6版全面講解了PL/SQL的特性和功能,涵蓋了直到Oracle數據庫12c R1版本發(fā)生的新變化。
在過去20多年,成千上萬的PL/SQL程序開發(fā)人員從本書中受益,這次的新版延續(xù)了之前的風格,提供了豐富的代碼示例,穿插了程序開發(fā)人員才能看懂的小幽默。本書介紹了PL/SQL語言的基礎知識、高級編碼技巧,并提供了zui佳實踐來幫助大家解決真實世界中的問題。 本書講解了如下內容: 借助于有關執(zhí)行、跟蹤、調試和管理代碼的清晰指導,快速編寫和運行PL/SQL程序; 學習12.1版本的新特性,包括ACCESIBLE_BY子句、WITH FUNCTION和UDF雜注以及視圖的BEQUEATH CURRENT_USER權限; 充分利用書中提供的大量代碼示例(從易于遵循的示例到可重用的打包工具,不一而足); 使用諸如PL/Scope和PL/SQL分層配置文件等Oracle工具,以及像函數結果緩存這樣的特性,優(yōu)化PL/SQL的性能; 使用程序包、過程、函數和觸發(fā)器來構建模塊化、易維護的PL/SQL應用程序。
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年就開始從事軟件的開發(fā)工作,并于1987~1992年在Oracle公司工作。
Bill Pribyl是Learning Oracle PL/SQL的主要作者、本書上一版以及配套口袋參考書(均由O’Reilly Media出版)的合著者。目前他在一家國際貿易公司內擔任一個編程小組的負責人。Bill曾經使用PL/SQL編寫TCP/IP網絡客戶端、tnsping呼出工具、近于實時的商品價格加載器以及**函數等。Bill擁有Rice大學的物理學學位。在業(yè)余時間里,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 提高執(zhí)行權限控制和交易 完整性 5 1.2.4 低調開始,持續(xù)改進 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開發(fā)者使用的 資源 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 采用有創(chuàng)造性的甚至激進的 方法 17 第2章 創(chuàng)建和運行PL/SQL 代碼 18 2.1 在數據庫中導航 18 2.2 創(chuàng)建和編輯源代碼 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 執(zhí)行基本的PL/SQL任務 30 2.4.1 創(chuàng)建存儲程序 31 2.4.2 執(zhí)行存儲的程序 33 2.4.3 顯示存儲程序 34 2.4.4 存儲程序的授權和別名 35 2.4.5 刪除一個存儲程序 36 2.4.6 隱藏存儲程序的源代碼 36 2.5 編輯PL/SQL的環(huán)境 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 規(guī)范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章 循環(huán)迭代處理 86 5.1 循環(huán)的基礎知識 86 5.1.1 不同循環(huán)的示例 86 5.1.2 PL/SQL循環(huán)的結構 88 5.2 簡單循環(huán) 89 5.2.1 終止簡單循環(huán):EXIT 和EXIT WHEN 89 5.2.2 模仿REPEAT UNTIL循環(huán) 90 5.2.3 故意的無限循環(huán) 91 5.3 WHILE循環(huán) 92 5.4 數值型FOR循環(huán) 93 5.4.1 數值型FOR循環(huán)的規(guī)則 94 5.4.2 數值型FOR循環(huán)的示例 94 5.4.3 處理特殊增量 95 5.5 游標FOR循環(huán) 96 5.5.1 游標FOR循環(huán)的示例 97 5.6 循環(huán)標簽 98 5.7 CONTINUE語句 99 5.8 迭代處理技巧 102 5.8.1 為循環(huán)索引使用可理解的 名稱 102 5.8.2 以正確的方式說再見 102 5.8.3 獲取FOR循環(huán)執(zhí)行的信息 103 5.8.4 循環(huán)SQL語句 104 第6章 異常處理 106 6.1 異常處理概念和術語 106 6.2 定義異常 108 6.2.1 聲明命名異常 108 6.2.2 關聯(lián)異常名稱與錯誤代碼 109 6.2.3 命名的系統(tǒng)異常 112 6.2.4 異常作用范圍 114 6.3 引發(fā)異常 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 繼續(xù)過去的異常 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 創(chuàng)建常見錯誤處理的標準 模板 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 傳統(tǒng)的檢索、提取和替換 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 使用時區(qū) 245 10.4.4 精確匹配需要格式掩碼 247 10.4.5 讓精確匹配更輕松 248 10.4.6 解釋滑動窗口中兩位數字的 年份 248 10.4.7 把時區(qū)轉換成字符串 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 觸發(fā)器偽記錄 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 執(zhí)行高級別集合操作 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 自治事務的規(guī)則和限制 402 14.3.3 事務的可見性 403 14.3.4 何時使用自治事務 403 14.3.5 創(chuàng)建自治日志記錄機制 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 與靜態(tài)游標的相似之處 437 15.5.3 聲明REF CURSOR類型 437 15.5.4 聲明游標變量 438 15.5.5 打開游標變量 439 15.5.6 從游標變量中提取數據 440 15.5.7 游標變量的使用規(guī)則 442 15.5.8 將游標變量作為參數傳遞 445 15.5.9 游標變量的約束限制 447 15.6 游標表達式 447 15.6.1 使用游標表達式 448 15.6.2 游標表達式的約束限制 450 第16章 動態(tài)SQL和動態(tài) PL/SQL 451 16.1 NDS語句 452 16.1.1 EXECUTE IMMEDIATE 語句 452 16.1.2 OPEN FOR語句 455 16.1.3 4種動態(tài)SQL方法 460 16.2 綁定變量 462 16.2.1 參數模式 463 16.2.2 重復的占位符 465 16.2.3 傳遞NULL值 465 16.3 使用對象和集合 466 16.4 動態(tài)PL/SQL 468 16.4.1 建立動態(tài)PL/SQL塊 469 16.4.2 用動態(tài)塊替換重復代碼 470 16.5 NDS建議 471 16.5.1 對共享程序使用調用者 權限 471 16.5.2 預測并處理動態(tài)錯誤 472 16.5.3 使用綁定而非拼接 474 16.5.4 減少代碼注入的危險 475 16.6 何時使用DBMS_SQL 478 16.6.1 獲得查詢列信息 478 16.6.2 實現第四種方法的動態(tài) SQL需求 479 16.6.3 最小化動態(tài)游標解析 485 16.6.4 Oracle數據庫11g新動態(tài) 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中顯式地關聯(lián) 實參和形參 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 構建程序包的規(guī)則 554 18.2.1 程序包說明 554 18.2.2 包體 555 18.2.3 包的初始化 557 18.3 包元素的調用規(guī)則 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 緩存靜態(tài)的會話數據 576 18.6 包和對象類型 577 第19章 觸發(fā)器 578 19.1 DML觸發(fā)器 579 19.1.1 DML觸發(fā)器的概念 580 19.1.2 創(chuàng)建DML觸發(fā)器 581 19.1.3 DML觸發(fā)器的例子:嚴禁 作弊! 586 19.1.4 同一類型的多個觸發(fā)器 591 19.1.5 如何對觸發(fā)順序排序 592 19.1.6 突變表的錯誤 594 19.1.7 復合觸發(fā)器:聚在一處 595 19.2 DDL觸發(fā)器 598 19.2.1 創(chuàng)建DDL觸發(fā)器 598 19.2.2 可用事件 600 19.2.3 可用屬性 601 19.2.4 使用事件和屬性 602 19.2.5 刪除不可刪除的 606 19.2.6 INSTEAD OFCREATE 觸發(fā)器 606 19.3 數據庫事件觸發(fā)器 607 19.3.1 創(chuàng)建數據庫事件觸發(fā)器 608 19.3.2 STARTUP觸發(fā)器 609 19.3.3 SHUTDOWN觸發(fā)器 610 19.3.4 LOGON觸發(fā)器 610 19.3.5 LOGOFF觸發(fā)器 610 19.3.6 SERVERERROR觸發(fā)器 611 19.4 INSTEAD OF觸發(fā)器 615 19.4.1 創(chuàng)建INSTEAD OF觸發(fā)器 615 19.4.2 INSTEAD OF INSERT 觸發(fā)器 616 19.4.3 INSTEAD OF UPDATE 觸發(fā)器 618 19.4.4 INSTEAD OF DELETE 觸發(fā)器 619 19.4.5 填充表 619 19.4.6 嵌套表的lNSTEAD OF 觸發(fā)器 620 19.5 AFTER SUSPEND觸發(fā)器 621 19.5.1 建立AFTER SUSPEND 觸發(fā)器 622 19.5.2 看看真實的觸發(fā)器 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 維護觸發(fā)器 628 19.6.1 禁用、啟用以及刪除 觸發(fā)器 628 19.6.2 創(chuàng)建一個禁用的觸發(fā)器 628 19.6.3 查看觸發(fā)器 629 19.6.4 檢查觸發(fā)器的有效性 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 通過視圖分析和更改觸發(fā)器 狀態(tài) 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的執(zhí)行 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進行動態(tài) 封裝 690 20.8.4 封裝代碼的使用指導 691 20.9 基于版本的重定義(Oracle 數據庫11g R2版本) 692 第21章 PL/SQL的性能優(yōu)化 695 21.1 輔助優(yōu)化的工具 696 21.1.1 內存使用分析 696 21.1.2 發(fā)現PL/SQL代碼中的瓶頸 697 21.1.3 計算花費時間 701 21.1.4 選擇最快的程序 703 21.1.5 避免無限循環(huán) 704 21.1.6 性能相關的警告 706 21.2 優(yōu)化編譯器 706 21.2.1 優(yōu)化器工作原理 707 21.2.2 循環(huán)Fetch操作的運行 時優(yōu)化 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 用管道函數調優(yōu)Merge 操作 756 21.5.3 用并行管道函數進行異步 數據導出 758 21.5.4 并行管道函數中的分區(qū)和 流子句對性能的影響 761 21.5.5 管道函數和基于成本的 優(yōu)化器 763 21.5.6 用管道函數優(yōu)化負載的數據 加載 768 21.5.7 管道函數結束語 775 21.6 專用的優(yōu)化技術 775 21.6.1 使用NOCOPY參數模式 提示符 775 21.6.2 使用正確的數據類型 778 21.6.3 SQL(12.1及更高版本)的 函數性能優(yōu)化 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 發(fā)送郵件 798 22.3.1 Oracle的前提條件 798 22.3.2 設置網絡安全 799 22.3.3 發(fā)送一個短的(小于32767字 節(jié))的純文本消息 799 22.3.4 在郵件地址中加上“界面友 好的”的名字 801 22.3.5 發(fā)送任意長度的純文本 消息 802 22.3.6 發(fā)送帶有小附件(小于32767 字節(jié))的消息 803 22.3.7 以附件形式發(fā)送一個小文件 (小于32767字節(jié)) 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章 應用系統(tǒng)安全與 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 靜態(tài)與動態(tài)策略 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如何執(zhí)行PL/SQL 代碼 878 24.2.1 一個示例 879 24.2.2 編譯器的限制 881 24.3 PL/SQL的缺省包 882 24.4 執(zhí)行權限模型 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 調用者權限優(yōu)點的限制 (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的全球化開發(fā) 工具箱 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 創(chuàng)建一個基類 966 26.2.2 創(chuàng)建子類型 967 26.2.3 方法 968 26.2.4 在Oracle數據庫11g及以后 版本中調用父類的方法 972 26.2.5 保存、提取、使用持久化 對象 974 26.2.6 演變和創(chuàng)建 981 26.2.7 回到指針嗎? 983 26.2.8 泛化數據:ANY類型 989 26.2.9 我們自己做 993 26.2.10 對象的比較 996 26.3 對象視圖 1001 26.3.1 一個關系型系統(tǒng)的示例 1002 26.3.2 帶有集合屬性的對象視圖 1003 26.3.3 對象子視圖 1006 26.3.4 帶有反關系的對象視圖 1008 26.3.5 INSTEAD OF觸發(fā)器 1008 26.3.6 對象視圖和對象表的區(qū)別 1010 26.4 維護對象類型和對象視圖 1012 26.4.1 數據字典 1012 26.4.2 權限 1013 26.5 來自一個關系開發(fā)者的總結 思考(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 創(chuàng)建和編譯我們的Java 代碼 1019 27.2.3 設置Java開發(fā)和執(zhí)行的 權限 1020 27.3 一個簡單的演示 1022 27.3.1 查找Java功能 1023 27.3.2 創(chuàng)建一個自定義Java類 1023 27.3.3 編譯和加載到Oracle 1025 27.3.4 創(chuàng)建一個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中發(fā)布與 使用Java 1036 27.8.1 調用規(guī)范 1036 27.8.2 一些調用規(guī)范的規(guī)則 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 示例:調用一個系統(tǒng)命令 1050 28.1.2 外部過程的架構 1052 28.2 Oracle網絡配置 1053 28.2.1 定義監(jiān)聽配置 1053 28.2.2 配置的安全特性 1055 28.3 設置多線程模式 1056 28.4 創(chuàng)建一個Oracle庫 1058 28.5 編寫調用規(guī)范 1059 28.5.1 調用規(guī)范:整體語法 1060 28.5.2 參數映射:示例重溫 1061 28.5.3 參數映射:完整的內容 1063 28.5.4 更多的語法:參數子句 1064 28.5.5 參數屬性 1065 28.6 從調用的C程序中引發(fā) 一個異常 1068 28.7 非默認的代理 1071 28.8 維護外部過程 1073 28.8.1 刪除庫 1073 28.8.2 數據字典 1074 28.8.3 規(guī)則和警示 1074 附錄A 正則表達式元字符和函數 參數 1075 附錄B 數字格式模型 1080 附錄C 日期格式模型 1083
你還可能感興趣
我要評論
|