關(guān)于我們
書單推薦
新書推薦
|
Oracle PL/SQL程序設(shè)計
本書基于Oracle數(shù)據(jù)庫12C, 從用PL/SQL編程、PL/SQL程序結(jié)構(gòu)、PL/SQL程序數(shù)據(jù)、PL/SQL中的SQL、構(gòu)造PL/SQL應(yīng)用程序、高級PL/SQL主題這6個方面詳細而系統(tǒng)地討論了PL/SQL以及如何有效地使用它。本書能夠幫助你充分利用PL/SQL來解決數(shù)據(jù)庫開發(fā)中遇到的各種問題, 引導(dǎo)你掌握各種構(gòu)建應(yīng)用的技巧和技術(shù), 以便使你編寫出高效、可維護的代碼。本書不但介紹了大量Oracle數(shù)據(jù)庫12C的PL/SQL新性能, 還提供了許多優(yōu)化PL/SQL性能的新方法。
本書在Oracle社區(qū)中被公認為是zui好的Oracle PL/SQL程序設(shè)計權(quán)V指南。如果想要充分利用PL/SQL,本書無疑是**的資源。本書第6版全面講解了PL/SQL的特性和功能,涵蓋了直到Oracle數(shù)據(jù)庫12c R1版本發(fā)生的新變化。
在過去20多年,成千上萬的PL/SQL程序開發(fā)人員從本書中受益,這次的新版延續(xù)了之前的風(fēng)格,提供了豐富的代碼示例,穿插了程序開發(fā)人員才能看懂的小幽默。本書介紹了PL/SQL語言的基礎(chǔ)知識、高級編碼技巧,并提供了zui佳實踐來幫助大家解決真實世界中的問題。 本書講解了如下內(nèi)容: 借助于有關(guān)執(zhí)行、跟蹤、調(diào)試和管理代碼的清晰指導(dǎo),快速編寫和運行PL/SQL程序; 學(xué)習(xí)12.1版本的新特性,包括ACCESIBLE_BY子句、WITH FUNCTION和UDF雜注以及視圖的BEQUEATH CURRENT_USER權(quán)限; 充分利用書中提供的大量代碼示例(從易于遵循的示例到可重用的打包工具,不一而足); 使用諸如PL/Scope和PL/SQL分層配置文件等Oracle工具,以及像函數(shù)結(jié)果緩存這樣的特性,優(yōu)化PL/SQL的性能; 使用程序包、過程、函數(shù)和觸發(fā)器來構(gòu)建模塊化、易維護的PL/SQL應(yīng)用程序。
Steven Feuerstein被尊為Oracle PL/SQL語言的世界ji專家領(lǐng)袖。他是本書上一版、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深技術(shù)顧問,從1980年就開始從事軟件的開發(fā)工作,并于1987~1992年在Oracle公司工作。
Bill Pribyl是Learning Oracle PL/SQL的主要作者、本書上一版以及配套口袋參考書(均由O’Reilly Media出版)的合著者。目前他在一家國際貿(mào)易公司內(nèi)擔(dān)任一個編程小組的負責(zé)人。Bill曾經(jīng)使用PL/SQL編寫TCP/IP網(wǎng)絡(luò)客戶端、tnsping呼出工具、近于實時的商品價格加載器以及**函數(shù)等。Bill擁有Rice大學(xué)的物理學(xué)學(xué)位。在業(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 提高應(yīng)用的可移植性 4 1.2.3 提高執(zhí)行權(quán)限控制和交易 完整性 5 1.2.4 低調(diào)開始,持續(xù)改進 5 1.3 這就是PL/SQL 6 1.3.1 與SQL的集成 6 1.3.2 控制和條件邏輯 7 1.3.3 出錯處理 8 1.4 關(guān)于PL/SQL版本 9 1.4.1 Oracle數(shù)據(jù)庫12c中PL/SQL 的新特性 10 1.5 可供PL/SQL開發(fā)者使用的 資源 12 1.5.1 O’Reilly的PL/SQL系列圖書 13 1.5.2 網(wǎng)絡(luò)上的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 在數(shù)據(jù)庫中導(dǎo)航 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 什么是“當(dāng)前目錄” 24 2.3.6 其他SQL*Plus任務(wù) 25 2.3.7 SQL*Plus中的異常處理 29 2.3.8 為什么SQL*Plus讓我們 又愛又恨 30 2.4 執(zhí)行基本的PL/SQL任務(wù) 30 2.4.1 創(chuàng)建存儲程序 31 2.4.2 執(zhí)行存儲的程序 33 2.4.3 顯示存儲程序 34 2.4.4 存儲程序的授權(quán)和別名 35 2.4.5 刪除一個存儲程序 36 2.4.6 隱藏存儲程序的源代碼 36 2.5 編輯PL/SQL的環(huán)境 37 2.6 從其他語言中調(diào)用PL/SQL 37 2.6.1 C語言,使用Oracle預(yù)編輯器 (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章 語言基礎(chǔ) 44 3.1 PL/SQL塊結(jié)構(gòu) 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 標(biāo)識符 56 3.3.1 保留字 57 3.3.2 空白和關(guān)鍵字 58 3.4 直接量 59 3.4.1 NULL 60 3.4.2 在一個直接量字符串中嵌入 單引號 61 3.4.3 數(shù)字直接量 61 3.4.4 布爾直接量 62 3.5 分號分隔符 62 3.6 注釋 63 3.6.1 單行注釋語法 63 3.6.2 多行注釋語法 63 3.7 PRAGMA關(guān)鍵字 64 3.8 標(biāo)簽 65 第2部分 PL/SQL程序結(jié)構(gòu) 第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 在標(biāo)簽后使用NULL 84 第5章 循環(huán)迭代處理 86 5.1 循環(huán)的基礎(chǔ)知識 86 5.1.1 不同循環(huán)的示例 86 5.1.2 PL/SQL循環(huán)的結(jié)構(gòu) 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 數(shù)值型FOR循環(huán) 93 5.4.1 數(shù)值型FOR循環(huán)的規(guī)則 94 5.4.2 數(shù)值型FOR循環(huán)的示例 94 5.4.3 處理特殊增量 95 5.5 游標(biāo)FOR循環(huán) 96 5.5.1 游標(biāo)FOR循環(huán)的示例 97 5.6 循環(huán)標(biāo)簽 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 異常處理概念和術(shù)語 106 6.2 定義異常 108 6.2.1 聲明命名異常 108 6.2.2 關(guān)聯(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 內(nèi)置錯誤函數(shù) 118 6.4.2 單一處理句柄中結(jié)合多個 異常 122 6.4.3 未處理異常 123 6.4.4 未處理異常的傳播 123 6.4.5 繼續(xù)過去的異常 125 6.4.6 編寫WHEN OTHERS處理 代碼 127 6.5 構(gòu)建有效的錯誤管理架構(gòu) 129 6.5.1 確定我們的異常管理策略 129 6.5.2 對不同類型異常進行標(biāo)準(zhǔn)化 處理 130 6.5.3 程序特定錯誤代碼的組織 使用 133 6.5.4 使用標(biāo)準(zhǔn)的錯誤管理程序 133 6.5.5 使用自己的異!皩ο蟆 135 6.5.6 創(chuàng)建常見錯誤處理的標(biāo)準(zhǔn) 模板 137 6.6 充分利用PL/SQL錯誤 管理 138 第3部分 PL/SQL程序數(shù)據(jù) 第7章 使用程序數(shù)據(jù) 141 7.1 程序數(shù)據(jù)的命名 141 7.2 PL/SQL數(shù)據(jù)類型概述 143 7.2.1 字符數(shù)據(jù) 143 7.2.2 數(shù)字 144 7.2.3 日期、時間戳和時間間隔 145 7.2.4 布爾類型 145 7.2.5 二進制數(shù)據(jù)類型 146 7.2.6 ROWID 146 7.2.7 REF CURSOR 146 7.2.8 Internet數(shù)據(jù)類型 147 7.2.9 “Any”數(shù)據(jù)類型 147 7.2.10 用戶自定義數(shù)據(jù)類型 147 7.3 程序數(shù)據(jù)的聲明 147 7.3.1 聲明一個變量 148 7.3.2 聲明常量 148 7.3.3 NOT NULL語句 149 7.3.4 錨定聲明 149 7.3.5 游標(biāo)和表的錨 151 7.3.6 使用錨定聲明的益處 152 7.3.7 NOT NULL數(shù)據(jù)類型的錨 153 7.4 程序員定義的子類型 153 7.5 數(shù)據(jù)類型轉(zhuǎn)換 154 7.5.1 隱式類型轉(zhuǎn)換 155 7.5.2 顯式類型轉(zhuǎn)換 156 第8章 字符串 162 8.1 字符串類型 162 8.1.1 VARCHAR2數(shù)據(jù)類型 163 8.1.2 CHAR數(shù)據(jù)類型 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 字符串函數(shù)快速參考 190 第9章 數(shù)字 199 9.1 數(shù)值型數(shù)字類型 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 數(shù)字子類型 212 9.2 數(shù)字轉(zhuǎn)換 213 9.2.1 TO_NUMBER函數(shù) 213 9.2.2 TO_CHAR函數(shù) 216 9.2.3 CAST函數(shù) 221 9.2.4 隱式轉(zhuǎn)換 222 9.3 數(shù)字運算符 224 9.4 數(shù)字函數(shù) 224 9.4.1 四舍五入和截斷函數(shù) 224 9.4.2 三角函數(shù) 225 9.4.3 數(shù)字函數(shù)的快速參考 225 第10章 日期和時間戳 230 10.1 Datetime數(shù)據(jù)類型 230 10.1.1 聲明日期時間變量 233 10.1.2 選擇日期時間數(shù)據(jù)類型 233 10.2 獲取當(dāng)前日期和時間 234 10.3 INTERVAL數(shù)據(jù)類型 236 10.3.1 聲明INTERVAL變量 237 10.3.2 什么時候使用INTERVAL 238 10.4 日期時間轉(zhuǎn)換 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 解釋滑動窗口中兩位數(shù)字的 年份 248 10.4.7 把時區(qū)轉(zhuǎn)換成字符串 249 10.4.8 用填充模式把輸出補齊 250 10.5 日期和時間戳直接量 251 10.6 時間間隔的轉(zhuǎn)換 252 10.6.1 從數(shù)字到時間間隔的轉(zhuǎn)換 252 10.6.2 把字符串轉(zhuǎn)換成間隔 253 10.6.3 時間間隔的格式化顯示 254 10.7 時間間隔直接量 254 10.8 CAST和EXTRACT 256 10.8.1 CAST函數(shù) 256 10.8.2 EXTRACT函數(shù) 258 10.9 日期時間的算法 258 10.9.1 時間間隔和日期時間的 算法 259 10.9.2 DATE數(shù)據(jù)類型的日期 算法 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 日期/時間函數(shù)的快速 參考 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 集合概念和術(shù)語 285 12.1.2 集合類型 287 12.1.3 集合示例 288 12.1.4 使用集合的場合 291 12.1.5 選擇一個集合類型 296 12.2 集合方法(內(nèi)置) 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 用數(shù)據(jù)填充集合 313 12.3.4 訪問集合內(nèi)的數(shù)據(jù) 318 12.3.5 使用字符串索引的集合 319 12.3.6 復(fù)雜數(shù)據(jù)類型的集合 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 必需的權(quán)限 347 12.5.2 集合和數(shù)據(jù)字典 348 第13章 其他數(shù)據(jù)類型 349 13.1 BOOLEAN類型 349 13.2 RAW數(shù)據(jù)類型 350 13.3 UROWID和ROWID數(shù)據(jù) 類型 351 13.3.1 獲取ROWID 352 13.3.2 使用ROWID 352 13.4 LOB數(shù)據(jù)類型 353 13.5 使用LOB 354 13.5.1 理解LOB定位符 356 13.5.2 LOB的空和NULL 357 13.5.3 向LOB中寫入數(shù)據(jù) 359 13.5.4 讀取LOB數(shù)據(jù) 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轉(zhuǎn)換函數(shù) 376 13.6 預(yù)定義的對象類型 376 13.6.1 XMLType類型 376 13.6.2 URI類型 379 13.6.3 Any類型 381 第4部分 PL/SQL中的SQL 第14章 DML和事務(wù)管理 387 14.1 PL/SQL中的DML 388 14.1.1 DML簡介 388 14.1.2 DML操作符的游標(biāo)屬性 391 14.1.3 從DML語句返回信息 392 14.1.4 DML和異常處理 393 14.1.5 DML和記錄 394 14.2 事務(wù)管理 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 自治事務(wù) 400 14.3.1 定義自治事務(wù) 401 14.3.2 自治事務(wù)的規(guī)則和限制 402 14.3.3 事務(wù)的可見性 403 14.3.4 何時使用自治事務(wù) 403 14.3.5 創(chuàng)建自治日志記錄機制 404 第15章 數(shù)據(jù)提取 407 15.1 游標(biāo)基礎(chǔ) 408 15.1.1 一些數(shù)據(jù)提取術(shù)語 408 15.1.2 典型的查詢操作 410 15.1.3 游標(biāo)屬性介紹 411 15.1.4 在游標(biāo)中引用PL/SQL 變量 413 15.1.5 顯式與隱式游標(biāo)之間的 選擇 414 15.2 使用隱式游標(biāo) 414 15.2.1 隱式游標(biāo)示例 415 15.2.2 隱式游標(biāo)的異常處理 416 15.2.3 隱式SQL游標(biāo)的屬性 418 15.3 使用顯式游標(biāo) 419 15.3.1 聲明顯式游標(biāo) 420 15.3.2 打開顯式游標(biāo) 423 15.3.3 從顯式游標(biāo)獲取 424 15.3.4 顯式游標(biāo)中的列別名 425 15.3.5 關(guān)閉顯式游標(biāo) 426 15.3.6 顯式游標(biāo)屬性 427 15.3.7 游標(biāo)參數(shù) 429 15.4 SELECT…FOR UPDATE 432 15.4.1 COMMIT釋放鎖定 433 15.4.2 WHERE CURRENT OF子句 434 15.5 游標(biāo)變量和REF CURSOR 435 15.5.1 為什么使用游標(biāo)變量 436 15.5.2 與靜態(tài)游標(biāo)的相似之處 437 15.5.3 聲明REF CURSOR類型 437 15.5.4 聲明游標(biāo)變量 438 15.5.5 打開游標(biāo)變量 439 15.5.6 從游標(biāo)變量中提取數(shù)據(jù) 440 15.5.7 游標(biāo)變量的使用規(guī)則 442 15.5.8 將游標(biāo)變量作為參數(shù)傳遞 445 15.5.9 游標(biāo)變量的約束限制 447 15.6 游標(biāo)表達式 447 15.6.1 使用游標(biāo)表達式 448 15.6.2 游標(biāo)表達式的約束限制 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 參數(shù)模式 463 16.2.2 重復(fù)的占位符 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)塊替換重復(fù)代碼 470 16.5 NDS建議 471 16.5.1 對共享程序使用調(diào)用者 權(quán)限 471 16.5.2 預(yù)測并處理動態(tài)錯誤 472 16.5.3 使用綁定而非拼接 474 16.5.4 減少代碼注入的危險 475 16.6 何時使用DBMS_SQL 478 16.6.1 獲得查詢列信息 478 16.6.2 實現(xiàn)第四種方法的動態(tài) SQL需求 479 16.6.3 最小化動態(tài)游標(biāo)解析 485 16.6.4 Oracle數(shù)據(jù)庫11g新動態(tài) SQL特性 486 16.6.5 DBMS_SQL增強安全 490 目錄(下) 第5部分 構(gòu)造PL/SQL應(yīng)用程序 第17章 過程、函數(shù)和參數(shù) 497 17.1 代碼模塊化 497 17.2 過程 499 17.2.1 調(diào)用一個過程 501 17.2.2 過程頭部 501 17.2.3 過程體 501 17.2.4 END標(biāo)簽 502 17.2.5 RETURN語句 502 17.3 函數(shù) 502 17.3.1 函數(shù)的結(jié)構(gòu) 503 17.3.2 返回的數(shù)據(jù)類型 504 17.3.3 END標(biāo)簽 506 17.3.4 調(diào)用函數(shù) 506 17.3.5 不帶參數(shù)的函數(shù) 507 17.3.6 函數(shù)頭 508 17.3.7 函數(shù)體 508 17.3.8 RETURN語句 509 17.4 參數(shù) 510 17.4.1 定義參數(shù) 511 17.4.2 實參和形參 511 17.4.3 參數(shù)模式 512 17.4.4 在PL/SQL中顯式地關(guān)聯(lián) 實參和形參 515 17.4.5 NOCOPY參數(shù)模式限定符 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 數(shù)字類型的重載 528 17.7 前置聲明 529 17.8 高級主題 530 17.8.1 在SQL內(nèi)部調(diào)用我們的 函數(shù) 530 17.8.2 表函數(shù) 536 17.8.3 確定性函數(shù) 545 17.8.4 隱式游標(biāo)結(jié)果(Oracle 數(shù)據(jù)庫12c) 546 17.9 將模塊化進行到底 547 第18章 程序包 548 18.1 為什么使用程序包 548 18.1.1 演示程序包的能力 549 18.1.2 與程序包相關(guān)的一些概念 552 18.1.3 圖示私有性 553 18.2 構(gòu)建程序包的規(guī)則 554 18.2.1 程序包說明 554 18.2.2 包體 555 18.2.3 包的初始化 557 18.3 包元素的調(diào)用規(guī)則 561 18.4 使用包數(shù)據(jù) 562 18.4.1 在一個Oracle會話內(nèi)全局 可見 562 18.4.2 全局公有數(shù)據(jù) 563 18.4.3 包游標(biāo) 563 18.4.4 包的串行化 568 18.5 何時使用包 570 18.5.1 封裝對數(shù)據(jù)的訪問 570 18.5.2 避免直接量的硬編碼 573 18.5.3 提高內(nèi)置特性的可用性 575 18.5.4 把邏輯上相關(guān)的功能組織 在一起 576 18.5.5 緩存靜態(tài)的會話數(shù)據(jù) 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ù)合觸發(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 數(shù)據(jù)庫事件觸發(fā)器 607 19.3.1 創(chuàng)建數(shù)據(jù)庫事件觸發(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 函數(shù) 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 管理數(shù)據(jù)庫內(nèi)的代碼 632 20.1.1 數(shù)據(jù)字典視圖概述 632 20.1.2 顯示存儲對象的信息 634 20.1.3 源代碼的顯示和搜索 635 20.1.4 根據(jù)程序的大小確定Pinning 需求 637 20.1.5 獲得存儲代碼的屬性 637 20.1.6 通過視圖分析和更改觸發(fā)器 狀態(tài) 638 20.1.7 分析參數(shù)信息 639 20.1.8 分析標(biāo)識符的使用(Oracle 數(shù)據(jù)庫11g的PL/Scope) 640 20.2 管理依賴關(guān)系及重編譯 代碼 643 20.2.1 通過數(shù)據(jù)字典視圖分析依賴 關(guān)系 643 20.2.2 細粒度依賴(Oracle 數(shù)據(jù)庫11g) 647 20.2.3 遠程依賴 648 20.2.4 Oracle的遠程調(diào)用模式的 限制 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 典型的、華而不實的測試 技術(shù) 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 數(shù)據(jù)庫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程序的調(diào)試 681 20.6.1 錯誤的調(diào)試方法 682 20.6.2 調(diào)試技巧和策略 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 封裝代碼的使用指導(dǎo) 691 20.9 基于版本的重定義(Oracle 數(shù)據(jù)庫11g R2版本) 692 第21章 PL/SQL的性能優(yōu)化 695 21.1 輔助優(yōu)化的工具 696 21.1.1 內(nèi)存使用分析 696 21.1.2 發(fā)現(xiàn)PL/SQL代碼中的瓶頸 697 21.1.3 計算花費時間 701 21.1.4 選擇最快的程序 703 21.1.5 避免無限循環(huán) 704 21.1.6 性能相關(guān)的警告 706 21.2 優(yōu)化編譯器 706 21.2.1 優(yōu)化器工作原理 707 21.2.2 循環(huán)Fetch操作的運行 時優(yōu)化 710 21.3 數(shù)據(jù)緩存技術(shù) 710 21.3.1 基于包的緩存 711 21.3.2 確定性函數(shù)的緩存 716 21.3.3 函數(shù)結(jié)果緩存(Oracle 數(shù)據(jù)庫11g) 718 21.3.4 緩存總結(jié) 731 21.4 重復(fù)的SQL的語句批 處理 732 21.4.1 通過BULK COLLECT加速 查詢 733 21.4.2 使用FORALL加速DML 739 21.5 利用管道化的表函數(shù)提升 性能 749 21.5.1 用基于管道化函數(shù)的加載 方式替換基于行的插入 750 21.5.2 用管道函數(shù)調(diào)優(yōu)Merge 操作 756 21.5.3 用并行管道函數(shù)進行異步 數(shù)據(jù)導(dǎo)出 758 21.5.4 并行管道函數(shù)中的分區(qū)和 流子句對性能的影響 761 21.5.5 管道函數(shù)和基于成本的 優(yōu)化器 763 21.5.6 用管道函數(shù)優(yōu)化負載的數(shù)據(jù) 加載 768 21.5.7 管道函數(shù)結(jié)束語 775 21.6 專用的優(yōu)化技術(shù) 775 21.6.1 使用NOCOPY參數(shù)模式 提示符 775 21.6.2 使用正確的數(shù)據(jù)類型 778 21.6.3 SQL(12.1及更高版本)的 函數(shù)性能優(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 從緩存中讀取內(nèi)容 783 22.2 文件的讀寫 784 22.2.1 UTL_FILE_DIR參數(shù) 784 22.2.2 使用Oracle目錄 786 22.2.3 打開文件 787 22.2.4 文件已經(jīng)打開了嗎? 789 22.2.5 關(guān)閉文件 789 22.2.6 讀取文件 790 22.2.7 向文件中寫 792 22.2.8 復(fù)制文件 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 設(shè)置網(wǎng)絡(luò)安全 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的數(shù)據(jù) (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頁 面提交數(shù)據(jù) 812 22.4.6 禁用cookie或者使cookie 持久化 816 22.4.7 從FTP服務(wù)器獲取數(shù)據(jù) 816 22.4.8 使用代理服務(wù)器 817 22.5 PL/SQL中可用的其他I/O 類型 817 22.5.1 數(shù)據(jù)庫管道、隊列、告警 817 22.5.2 TCPSocket 818 22.5.3 Oracle的內(nèi)置Web服務(wù)器 818 第6部分 高級PL/SQL主題 第23章 應(yīng)用系統(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 數(shù)據(jù)加密 827 23.2.6 LOB的加密 830 23.2.7 安全文件 830 23.2.8 數(shù)據(jù)解密 831 23.2.9 生成密鑰 832 23.2.10 密鑰的管理 833 23.2.11 加密哈希 838 23.2.12 使用消息驗證碼 839 23.2.13 使用透明數(shù)據(jù)加密 (TDE) 841 23.2.14 透明的表空間加密 843 23.3 行級安全 844 23.3.1 為什么要學(xué)習(xí)RLS 846 23.3.2 一個簡單的RLS示例 847 23.3.3 靜態(tài)與動態(tài)策略 850 23.3.4 使用列敏感的RLS 854 23.3.5 RLS調(diào)試 857 23.4 應(yīng)用程序上下文 861 23.4.1 使用應(yīng)用程序上下文 862 23.4.2 上下文的安全 863 23.4.3 把上下文用作RLS的謂詞 條件 863 23.4.4 識別出非數(shù)據(jù)庫的用戶 867 23.5 細粒度審計 868 23.5.1 為什么要學(xué)習(xí)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架構(gòu) 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í)行權(quán)限模型 884 24.4.1 定義者權(quán)限模型 885 24.4.2 調(diào)用者權(quán)限模型 889 24.4.3 組合權(quán)限模型 891 24.4.4 給PL/SQL程序單元授予角色 (Oracle數(shù)據(jù)庫12c) 892 24.4.5 “誰調(diào)用了我?”函數(shù) (Oracle數(shù)據(jù)庫12c) 895 24.4.6 視圖的BEQUEATH CURRENT_ USER子句(Oracle數(shù)據(jù)庫 12c) 895 24.4.7 調(diào)用者權(quán)限優(yōu)點的限制 (Oracle數(shù)據(jù)庫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 用查詢指令實現(xiàn)程序?qū)S?br /> 設(shè)置 906 24.5.7 使用預(yù)處理后的代碼 907 24.6 PL/SQL和數(shù)據(jù)庫實例 內(nèi)存 908 24.6.1 SGA、PGA和UGA 908 24.6.2 游標(biāo)、內(nèi)存及其他 909 24.6.3 減少內(nèi)存使用的技巧 910 24.6.4 內(nèi)存用光了怎么辦 920 24.7 原生式編譯 922 24.7.1 什么時候使用解釋模式 922 24.7.2 什么時候使用原生模式 922 24.7.3 原生編譯和數(shù)據(jù)庫版本 923 24.8 一些須知 923 第25章 PL/SQL的全球化和 本地化 925 25.1 概述和術(shù)語 926 25.2 Unicode入門 928 25.2.1 國家字符集的數(shù)據(jù)類型 929 25.2.2 字符編碼 929 25.2.3 和全球化支持相關(guān)的參數(shù) 930 25.2.4 Unicode函數(shù) 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 時間戳數(shù)據(jù)類型 951 25.6.2 日期/時間格式 952 25.7 貨幣轉(zhuǎn)換 955 25.8 PL/SQL的全球化開發(fā) 工具箱 957 25.8.1 UTL_I18N工具包 957 25.8.2 UTL_LMS異常處理包 960 25.8.3 GDK實現(xiàn)選項 961 第26章 PL/SQL的面向?qū)ο?br /> 特性 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數(shù)據(jù)庫11g及以后 版本中調(diào)用父類的方法 972 26.2.5 保存、提取、使用持久化 對象 974 26.2.6 演變和創(chuàng)建 981 26.2.7 回到指針嗎? 983 26.2.8 泛化數(shù)據(jù):ANY類型 989 26.2.9 我們自己做 993 26.2.10 對象的比較 996 26.3 對象視圖 1001 26.3.1 一個關(guān)系型系統(tǒng)的示例 1002 26.3.2 帶有集合屬性的對象視圖 1003 26.3.3 對象子視圖 1006 26.3.4 帶有反關(guān)系的對象視圖 1008 26.3.5 INSTEAD OF觸發(fā)器 1008 26.3.6 對象視圖和對象表的區(qū)別 1010 26.4 維護對象類型和對象視圖 1012 26.4.1 數(shù)據(jù)字典 1012 26.4.2 權(quán)限 1013 26.5 來自一個關(guān)系開發(fā)者的總結(jié) 思考(C551, E1200) 1015 第27章 從PL/SQL中調(diào)用 Java 1017 27.1 Oracle和Java 1017 27.2 準(zhǔn)備好在Oracle中使用 Java 1018 27.2.1 安裝Java 1019 27.2.2 創(chuàng)建和編譯我們的Java 代碼 1019 27.2.3 設(shè)置Java開發(fā)和執(zhí)行的 權(quán)限 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 管理數(shù)據(jù)庫中的Java 1030 27.6.1 Oracle中的Java命名空間 1030 27.6.2 檢查加載的Java元素 1031 27.7 使用DBMS_JAVA 1032 27.7.1 LONGNAME:轉(zhuǎn)換Java 長名字 1032 27.7.2 GET_、SET_和RESET_ COMPILER_OPTION: 得到和設(shè)置(一些) 編譯器選項 1033 27.7.3 SET_OUTPUT:允許從 Java中輸出 1034 27.7.4 EXPORT_SOURCE、EXPORT_ RESOURCE和EXPORT_ CLASS:導(dǎo)出模式對象 1034 27.8 在PL/SQL中發(fā)布與 使用Java 1036 27.8.1 調(diào)用規(guī)范 1036 27.8.2 一些調(diào)用規(guī)范的規(guī)則 1037 27.8.3 映射數(shù)據(jù)類型 1038 27.8.4 在SQL中調(diào)用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 示例:調(diào)用一個系統(tǒng)命令 1050 28.1.2 外部過程的架構(gòu) 1052 28.2 Oracle網(wǎng)絡(luò)配置 1053 28.2.1 定義監(jiān)聽配置 1053 28.2.2 配置的安全特性 1055 28.3 設(shè)置多線程模式 1056 28.4 創(chuàng)建一個Oracle庫 1058 28.5 編寫調(diào)用規(guī)范 1059 28.5.1 調(diào)用規(guī)范:整體語法 1060 28.5.2 參數(shù)映射:示例重溫 1061 28.5.3 參數(shù)映射:完整的內(nèi)容 1063 28.5.4 更多的語法:參數(shù)子句 1064 28.5.5 參數(shù)屬性 1065 28.6 從調(diào)用的C程序中引發(fā) 一個異常 1068 28.7 非默認的代理 1071 28.8 維護外部過程 1073 28.8.1 刪除庫 1073 28.8.2 數(shù)據(jù)字典 1074 28.8.3 規(guī)則和警示 1074 附錄A 正則表達式元字符和函數(shù) 參數(shù) 1075 附錄B 數(shù)字格式模型 1080 附錄C 日期格式模型 1083
你還可能感興趣
我要評論
|