關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Oracle PL/SQL程序設(shè)計(jì)
本書(shū)基于Oracle數(shù)據(jù)庫(kù)12C, 從用PL/SQL編程、PL/SQL程序結(jié)構(gòu)、PL/SQL程序數(shù)據(jù)、PL/SQL中的SQL、構(gòu)造PL/SQL應(yīng)用程序、高級(jí)PL/SQL主題這6個(gè)方面詳細(xì)而系統(tǒng)地討論了PL/SQL以及如何有效地使用它。本書(shū)能夠幫助你充分利用PL/SQL來(lái)解決數(shù)據(jù)庫(kù)開(kāi)發(fā)中遇到的各種問(wèn)題, 引導(dǎo)你掌握各種構(gòu)建應(yīng)用的技巧和技術(shù), 以便使你編寫(xiě)出高效、可維護(hù)的代碼。本書(shū)不但介紹了大量Oracle數(shù)據(jù)庫(kù)12C的PL/SQL新性能, 還提供了許多優(yōu)化PL/SQL性能的新方法。
本書(shū)在Oracle社區(qū)中被公認(rèn)為是zui好的Oracle PL/SQL程序設(shè)計(jì)權(quán)V指南。如果想要充分利用PL/SQL,本書(shū)無(wú)疑是**的資源。本書(shū)第6版全面講解了PL/SQL的特性和功能,涵蓋了直到Oracle數(shù)據(jù)庫(kù)12c R1版本發(fā)生的新變化。
在過(guò)去20多年,成千上萬(wàn)的PL/SQL程序開(kāi)發(fā)人員從本書(shū)中受益,這次的新版延續(xù)了之前的風(fēng)格,提供了豐富的代碼示例,穿插了程序開(kāi)發(fā)人員才能看懂的小幽默。本書(shū)介紹了PL/SQL語(yǔ)言的基礎(chǔ)知識(shí)、高級(jí)編碼技巧,并提供了zui佳實(shí)踐來(lái)幫助大家解決真實(shí)世界中的問(wèn)題。 本書(shū)講解了如下內(nèi)容: 借助于有關(guān)執(zhí)行、跟蹤、調(diào)試和管理代碼的清晰指導(dǎo),快速編寫(xiě)和運(yùn)行PL/SQL程序; 學(xué)習(xí)12.1版本的新特性,包括ACCESIBLE_BY子句、WITH FUNCTION和UDF雜注以及視圖的BEQUEATH CURRENT_USER權(quán)限; 充分利用書(shū)中提供的大量代碼示例(從易于遵循的示例到可重用的打包工具,不一而足); 使用諸如PL/Scope和PL/SQL分層配置文件等Oracle工具,以及像函數(shù)結(jié)果緩存這樣的特性,優(yōu)化PL/SQL的性能; 使用程序包、過(guò)程、函數(shù)和觸發(fā)器來(lái)構(gòu)建模塊化、易維護(hù)的PL/SQL應(yīng)用程序。
Steven Feuerstein被尊為Oracle PL/SQL語(yǔ)言的世界ji專家領(lǐng)袖。他是本書(shū)上一版、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以及多本口袋參考書(shū)(均由O’Reilly Media出版)的作者或合著者。Steven還是Quest Software 的zi深技術(shù)顧問(wèn),從1980年就開(kāi)始從事軟件的開(kāi)發(fā)工作,并于1987~1992年在Oracle公司工作。
Bill Pribyl是Learning Oracle PL/SQL的主要作者、本書(shū)上一版以及配套口袋參考書(shū)(均由O’Reilly Media出版)的合著者。目前他在一家國(guó)際貿(mào)易公司內(nèi)擔(dān)任一個(gè)編程小組的負(fù)責(zé)人。Bill曾經(jīng)使用PL/SQL編寫(xiě)TCP/IP網(wǎng)絡(luò)客戶端、tnsping呼出工具、近于實(shí)時(shí)的商品價(jià)格加載器以及**函數(shù)等。Bill擁有Rice大學(xué)的物理學(xué)學(xué)位。在業(yè)余時(shí)間里,Bill的大部分精力都用來(lái)照顧罹患炎性乳腺癌的妻子。
目錄(上)
第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)開(kāi)始,持續(xù)改進(jìn) 5 1.3 這就是PL/SQL 6 1.3.1 與SQL的集成 6 1.3.2 控制和條件邏輯 7 1.3.3 出錯(cuò)處理 8 1.4 關(guān)于PL/SQL版本 9 1.4.1 Oracle數(shù)據(jù)庫(kù)12c中PL/SQL 的新特性 10 1.5 可供PL/SQL開(kāi)發(fā)者使用的 資源 12 1.5.1 O’Reilly的PL/SQL系列圖書(shū) 13 1.5.2 網(wǎng)絡(luò)上的PL/SQL資源 14 1.6 一些建議 15 1.6.1 別急,慢慢來(lái) 15 1.6.2 不要畏懼尋求幫助 16 1.6.3 采用有創(chuàng)造性的甚至激進(jìn)的 方法 17 第2章 創(chuàng)建和運(yùn)行PL/SQL 代碼 18 2.1 在數(shù)據(jù)庫(kù)中導(dǎo)航 18 2.2 創(chuàng)建和編輯源代碼 19 2.3 SQL*Plus 19 2.3.1 啟動(dòng)SQL*Plus 21 2.3.2 運(yùn)行SQL語(yǔ)句 22 2.3.3 運(yùn)行PL/SQL程序 22 2.3.4 運(yùn)行一個(gè)腳本 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讓我們 又愛(ài)又恨 30 2.4 執(zhí)行基本的PL/SQL任務(wù) 30 2.4.1 創(chuàng)建存儲(chǔ)程序 31 2.4.2 執(zhí)行存儲(chǔ)的程序 33 2.4.3 顯示存儲(chǔ)程序 34 2.4.4 存儲(chǔ)程序的授權(quán)和別名 35 2.4.5 刪除一個(gè)存儲(chǔ)程序 36 2.4.6 隱藏存儲(chǔ)程序的源代碼 36 2.5 編輯PL/SQL的環(huán)境 37 2.6 從其他語(yǔ)言中調(diào)用PL/SQL 37 2.6.1 C語(yǔ)言,使用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擴(kuò)展 41 2.6.5 PL/SQL Server Pages 42 2.6.6 其他 43 第3章 語(yǔ)言基礎(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語(yǔ)句中對(duì)變量和 列的引用 49 3.1.6 可見(jiàn)性 51 3.2 PL/SQL字符集 54 3.3 標(biāo)識(shí)符 56 3.3.1 保留字 57 3.3.2 空白和關(guān)鍵字 58 3.4 直接量 59 3.4.1 NULL 60 3.4.2 在一個(gè)直接量字符串中嵌入 單引號(hào) 61 3.4.3 數(shù)字直接量 61 3.4.4 布爾直接量 62 3.5 分號(hào)分隔符 62 3.6 注釋 63 3.6.1 單行注釋語(yǔ)法 63 3.6.2 多行注釋語(yǔ)法 63 3.7 PRAGMA關(guān)鍵字 64 3.8 標(biāo)簽 65 第2部分 PL/SQL程序結(jié)構(gòu) 第4章 條件與順序控制 69 4.1 IF語(yǔ)句 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語(yǔ)法陷阱 73 4.1.5 嵌套的IF語(yǔ)句 75 4.1.6 短路估算 75 4.2 CASE語(yǔ)句和表達(dá)式 77 4.2.1 簡(jiǎn)單的CASE語(yǔ)句 77 4.2.2 搜索CASE語(yǔ)句 79 4.2.3 嵌套CASE語(yǔ)句 81 4.2.4 CASE表達(dá)式 81 4.3 GOTO語(yǔ)句 83 4.4 NULL語(yǔ)句 84 4.4.1 提高程序的可讀性 84 4.4.2 在標(biāo)簽后使用NULL 84 第5章 循環(huán)迭代處理 86 5.1 循環(huán)的基礎(chǔ)知識(shí) 86 5.1.1 不同循環(huán)的示例 86 5.1.2 PL/SQL循環(huán)的結(jié)構(gòu) 88 5.2 簡(jiǎn)單循環(huán) 89 5.2.1 終止簡(jiǎn)單循環(huán):EXIT 和EXIT WHEN 89 5.2.2 模仿REPEAT UNTIL循環(huán) 90 5.2.3 故意的無(wú)限循環(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語(yǔ)句 99 5.8 迭代處理技巧 102 5.8.1 為循環(huán)索引使用可理解的 名稱 102 5.8.2 以正確的方式說(shuō)再見(jiàn) 102 5.8.3 獲取FOR循環(huán)執(zhí)行的信息 103 5.8.4 循環(huán)SQL語(yǔ)句 104 第6章 異常處理 106 6.1 異常處理概念和術(shù)語(yǔ) 106 6.2 定義異常 108 6.2.1 聲明命名異常 108 6.2.2 關(guān)聯(lián)異常名稱與錯(cuò)誤代碼 109 6.2.3 命名的系統(tǒng)異常 112 6.2.4 異常作用范圍 114 6.3 引發(fā)異常 115 6.3.1 RAISE語(yǔ)句 115 6.3.2 使用RAISE_APPLICATION_ ERROR 116 6.4 處理異常 117 6.4.1 內(nèi)置錯(cuò)誤函數(shù) 118 6.4.2 單一處理句柄中結(jié)合多個(gè) 異常 122 6.4.3 未處理異常 123 6.4.4 未處理異常的傳播 123 6.4.5 繼續(xù)過(guò)去的異常 125 6.4.6 編寫(xiě)WHEN OTHERS處理 代碼 127 6.5 構(gòu)建有效的錯(cuò)誤管理架構(gòu) 129 6.5.1 確定我們的異常管理策略 129 6.5.2 對(duì)不同類型異常進(jìn)行標(biāo)準(zhǔn)化 處理 130 6.5.3 程序特定錯(cuò)誤代碼的組織 使用 133 6.5.4 使用標(biāo)準(zhǔn)的錯(cuò)誤管理程序 133 6.5.5 使用自己的異常“對(duì)象” 135 6.5.6 創(chuàng)建常見(jiàn)錯(cuò)誤處理的標(biāo)準(zhǔn) 模板 137 6.6 充分利用PL/SQL錯(cuò)誤 管理 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 日期、時(shí)間戳和時(shí)間間隔 145 7.2.4 布爾類型 145 7.2.5 二進(jìn)制數(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 聲明一個(gè)變量 148 7.3.2 聲明常量 148 7.3.3 NOT NULL語(yǔ)句 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 處理大小寫(xiě) 169 8.2.5 傳統(tǒng)的檢索、提取和替換 172 8.2.6 填充 174 8.2.7 剪裁 176 8.2.8 正則表達(dá)式的檢索、提取和 替換 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ù)字運(yùn)算符 224 9.4 數(shù)字函數(shù) 224 9.4.1 四舍五入和截?cái)嗪瘮?shù) 224 9.4.2 三角函數(shù) 225 9.4.3 數(shù)字函數(shù)的快速參考 225 第10章 日期和時(shí)間戳 230 10.1 Datetime數(shù)據(jù)類型 230 10.1.1 聲明日期時(shí)間變量 233 10.1.2 選擇日期時(shí)間數(shù)據(jù)類型 233 10.2 獲取當(dāng)前日期和時(shí)間 234 10.3 INTERVAL數(shù)據(jù)類型 236 10.3.1 聲明INTERVAL變量 237 10.3.2 什么時(shí)候使用INTERVAL 238 10.4 日期時(shí)間轉(zhuǎn)換 240 10.4.1 從字符串到日期時(shí)間 240 10.4.2 從日期時(shí)間到字符串 242 10.4.3 使用時(shí)區(qū) 245 10.4.4 精確匹配需要格式掩碼 247 10.4.5 讓精確匹配更輕松 248 10.4.6 解釋滑動(dòng)窗口中兩位數(shù)字的 年份 248 10.4.7 把時(shí)區(qū)轉(zhuǎn)換成字符串 249 10.4.8 用填充模式把輸出補(bǔ)齊 250 10.5 日期和時(shí)間戳直接量 251 10.6 時(shí)間間隔的轉(zhuǎn)換 252 10.6.1 從數(shù)字到時(shí)間間隔的轉(zhuǎn)換 252 10.6.2 把字符串轉(zhuǎn)換成間隔 253 10.6.3 時(shí)間間隔的格式化顯示 254 10.7 時(shí)間間隔直接量 254 10.8 CAST和EXTRACT 256 10.8.1 CAST函數(shù) 256 10.8.2 EXTRACT函數(shù) 258 10.9 日期時(shí)間的算法 258 10.9.1 時(shí)間間隔和日期時(shí)間的 算法 259 10.9.2 DATE數(shù)據(jù)類型的日期 算法 260 10.9.3 計(jì)算兩個(gè)日期時(shí)間之間的 時(shí)間間隔 260 10.9.4 DATE和TIMESTAMP混合 計(jì)算 262 10.9.5 時(shí)間間隔的加減運(yùn)算 263 10.9.6 時(shí)間間隔的乘除運(yùn)算 264 10.9.7 使用不受限制的時(shí)間間隔 類型 264 10.10 日期/時(shí)間函數(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ù)語(yǔ) 285 12.1.2 集合類型 287 12.1.3 集合示例 288 12.1.4 使用集合的場(chǎng)合 291 12.1.5 選擇一個(gè)集合類型 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 訪問(wèn)集合內(nèi)的數(shù)據(jù) 318 12.3.5 使用字符串索引的集合 319 12.3.6 復(fù)雜數(shù)據(jù)類型的集合 324 12.3.7 多級(jí)集合 327 12.3.8 在SQL中使用集合 335 12.4 嵌套表的多重集合操作 342 12.4.1 測(cè)試嵌套表是否相等及成員 歸屬 343 12.4.2 檢查元素是否是嵌套表的 成員 344 12.4.3 執(zhí)行高級(jí)別集合操作 345 12.4.4 嵌套表中的去重 346 12.5 schema級(jí)別集合的維護(hù) 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中寫(xiě)入數(shù)據(jù) 359 13.5.4 讀取LOB數(shù)據(jù) 361 13.5.5 BFILE的不同之處 363 13.5.6 SecureFiles和BasicFiles 367 13.5.7 臨時(shí)LOB 369 13.5.8 原生的LOB操作 372 13.5.9 LOB轉(zhuǎn)換函數(shù) 376 13.6 預(yù)定義的對(duì)象類型 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簡(jiǎn)介 388 14.1.2 DML操作符的游標(biāo)屬性 391 14.1.3 從DML語(yǔ)句返回信息 392 14.1.4 DML和異常處理 393 14.1.5 DML和記錄 394 14.2 事務(wù)管理 397 14.2.1 COMMIT語(yǔ)句 397 14.2.2 ROLLBACK語(yǔ)句 398 14.2.3 SAVEPOINT語(yǔ)句 399 14.2.4 SET TRANSACTION語(yǔ)句 399 14.2.5 LOCK TABLE語(yǔ)句 400 14.3 自治事務(wù) 400 14.3.1 定義自治事務(wù) 401 14.3.2 自治事務(wù)的規(guī)則和限制 402 14.3.3 事務(wù)的可見(jiàn)性 403 14.3.4 何時(shí)使用自治事務(wù) 403 14.3.5 創(chuàng)建自治日志記錄機(jī)制 404 第15章 數(shù)據(jù)提取 407 15.1 游標(biāo)基礎(chǔ) 408 15.1.1 一些數(shù)據(jù)提取術(shù)語(yǔ) 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 打開(kāi)顯式游標(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 打開(kāi)游標(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)表達(dá)式 447 15.6.1 使用游標(biāo)表達(dá)式 448 15.6.2 游標(biāo)表達(dá)式的約束限制 450 第16章 動(dòng)態(tài)SQL和動(dòng)態(tài) PL/SQL 451 16.1 NDS語(yǔ)句 452 16.1.1 EXECUTE IMMEDIATE 語(yǔ)句 452 16.1.2 OPEN FOR語(yǔ)句 455 16.1.3 4種動(dòng)態(tài)SQL方法 460 16.2 綁定變量 462 16.2.1 參數(shù)模式 463 16.2.2 重復(fù)的占位符 465 16.2.3 傳遞NULL值 465 16.3 使用對(duì)象和集合 466 16.4 動(dòng)態(tài)PL/SQL 468 16.4.1 建立動(dòng)態(tài)PL/SQL塊 469 16.4.2 用動(dòng)態(tài)塊替換重復(fù)代碼 470 16.5 NDS建議 471 16.5.1 對(duì)共享程序使用調(diào)用者 權(quán)限 471 16.5.2 預(yù)測(cè)并處理動(dòng)態(tài)錯(cuò)誤 472 16.5.3 使用綁定而非拼接 474 16.5.4 減少代碼注入的危險(xiǎn) 475 16.6 何時(shí)使用DBMS_SQL 478 16.6.1 獲得查詢列信息 478 16.6.2 實(shí)現(xiàn)第四種方法的動(dòng)態(tài) SQL需求 479 16.6.3 最小化動(dòng)態(tài)游標(biāo)解析 485 16.6.4 Oracle數(shù)據(jù)庫(kù)11g新動(dòng)態(tài) SQL特性 486 16.6.5 DBMS_SQL增強(qiáng)安全 490 目錄(下) 第5部分 構(gòu)造PL/SQL應(yīng)用程序 第17章 過(guò)程、函數(shù)和參數(shù) 497 17.1 代碼模塊化 497 17.2 過(guò)程 499 17.2.1 調(diào)用一個(gè)過(guò)程 501 17.2.2 過(guò)程頭部 501 17.2.3 過(guò)程體 501 17.2.4 END標(biāo)簽 502 17.2.5 RETURN語(yǔ)句 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語(yǔ)句 509 17.4 參數(shù) 510 17.4.1 定義參數(shù) 511 17.4.2 實(shí)參和形參 511 17.4.3 參數(shù)模式 512 17.4.4 在PL/SQL中顯式地關(guān)聯(lián) 實(shí)參和形參 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 高級(jí)主題 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ù)庫(kù)12c) 546 17.9 將模塊化進(jìn)行到底 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 程序包說(shuō)明 554 18.2.2 包體 555 18.2.3 包的初始化 557 18.3 包元素的調(diào)用規(guī)則 561 18.4 使用包數(shù)據(jù) 562 18.4.1 在一個(gè)Oracle會(huì)話內(nèi)全局 可見(jiàn) 562 18.4.2 全局公有數(shù)據(jù) 563 18.4.3 包游標(biāo) 563 18.4.4 包的串行化 568 18.5 何時(shí)使用包 570 18.5.1 封裝對(duì)數(shù)據(jù)的訪問(wèn) 570 18.5.2 避免直接量的硬編碼 573 18.5.3 提高內(nèi)置特性的可用性 575 18.5.4 把邏輯上相關(guān)的功能組織 在一起 576 18.5.5 緩存靜態(tài)的會(huì)話數(shù)據(jù) 576 18.6 包和對(duì)象類型 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ā)器的例子:嚴(yán)禁 作弊! 586 19.1.4 同一類型的多個(gè)觸發(fā)器 591 19.1.5 如何對(duì)觸發(fā)順序排序 592 19.1.6 突變表的錯(cuò)誤 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ù)庫(kù)事件觸發(fā)器 607 19.3.1 創(chuàng)建數(shù)據(jù)庫(kù)事件觸發(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 看看真實(shí)的觸發(fā)器 623 19.5.3 ORA_SPACE_ERROR_lNFO 函數(shù) 624 19.5.4 DBMS_RESUMABLE包 625 19.5.5 捕獲多個(gè)時(shí)間 626 19.5.6 是否該處理? 627 19.6 維護(hù)觸發(fā)器 628 19.6.1 禁用、啟用以及刪除 觸發(fā)器 628 19.6.2 創(chuàng)建一個(gè)禁用的觸發(fā)器 628 19.6.3 查看觸發(fā)器 629 19.6.4 檢查觸發(fā)器的有效性 630 第20章 管理PL/SQL代碼 631 20.1 管理數(shù)據(jù)庫(kù)內(nèi)的代碼 632 20.1.1 數(shù)據(jù)字典視圖概述 632 20.1.2 顯示存儲(chǔ)對(duì)象的信息 634 20.1.3 源代碼的顯示和搜索 635 20.1.4 根據(jù)程序的大小確定Pinning 需求 637 20.1.5 獲得存儲(chǔ)代碼的屬性 637 20.1.6 通過(guò)視圖分析和更改觸發(fā)器 狀態(tài) 638 20.1.7 分析參數(shù)信息 639 20.1.8 分析標(biāo)識(shí)符的使用(Oracle 數(shù)據(jù)庫(kù)11g的PL/Scope) 640 20.2 管理依賴關(guān)系及重編譯 代碼 643 20.2.1 通過(guò)數(shù)據(jù)字典視圖分析依賴 關(guān)系 643 20.2.2 細(xì)粒度依賴(Oracle 數(shù)據(jù)庫(kù)11g) 647 20.2.3 遠(yuǎn)程依賴 648 20.2.4 Oracle的遠(yuǎn)程調(diào)用模式的 限制 650 20.2.5 重編譯無(wú)效的程序單元 651 20.3 編譯時(shí)刻警告 655 20.3.1 一個(gè)快速示例 655 20.3.2 開(kāi)啟編譯時(shí)刻告警 656 20.3.3 一些有用的警告 657 20.4 測(cè)試PL/SQL程序 664 20.4.1 典型的、華而不實(shí)的測(cè)試 技術(shù) 665 20.4.2 PL/SQL代碼測(cè)試的一般 建議 668 20.4.3 PL/SQL的自動(dòng)測(cè)試選項(xiàng) 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ù)庫(kù)12c) 673 20.5.3 DBMS_APPLICATION_ INFO 676 20.5.4 使用opp_trace進(jìn)行跟蹤 677 20.5.5 DBMS_TRACE工具包 678 20.6 PL/SQL程序的調(diào)試 681 20.6.1 錯(cuò)誤的調(diào)試方法 682 20.6.2 調(diào)試技巧和策略 683 20.7 使用白名單來(lái)控制對(duì)程序 單元的訪問(wèn) 687 20.8 存儲(chǔ)代碼的保護(hù) 689 20.8.1 封裝的約束和局限 690 20.8.2 使用封裝程序 690 20.8.3 使用DBMS_DDL進(jìn)行動(dòng)態(tài) 封裝 690 20.8.4 封裝代碼的使用指導(dǎo) 691 20.9 基于版本的重定義(Oracle 數(shù)據(jù)庫(kù)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 計(jì)算花費(fèi)時(shí)間 701 21.1.4 選擇最快的程序 703 21.1.5 避免無(wú)限循環(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ùn)行 時(shí)優(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ù)庫(kù)11g) 718 21.3.4 緩存總結(jié) 731 21.4 重復(fù)的SQL的語(yǔ)句批 處理 732 21.4.1 通過(guò)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ù)進(jìn)行異步 數(shù)據(jù)導(dǎo)出 758 21.5.4 并行管道函數(shù)中的分區(qū)和 流子句對(duì)性能的影響 761 21.5.5 管道函數(shù)和基于成本的 優(yōu)化器 763 21.5.6 用管道函數(shù)優(yōu)化負(fù)載的數(shù)據(jù) 加載 768 21.5.7 管道函數(shù)結(jié)束語(yǔ) 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 向緩存中寫(xiě)入行 782 22.1.3 從緩存中讀取內(nèi)容 783 22.2 文件的讀寫(xiě) 784 22.2.1 UTL_FILE_DIR參數(shù) 784 22.2.2 使用Oracle目錄 786 22.2.3 打開(kāi)文件 787 22.2.4 文件已經(jīng)打開(kāi)了嗎? 789 22.2.5 關(guān)閉文件 789 22.2.6 讀取文件 790 22.2.7 向文件中寫(xiě) 792 22.2.8 復(fù)制文件 795 22.2.9 刪除文件 795 22.2.10 改名和移動(dòng)文件 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ā)送一個(gè)短的(小于32767字 節(jié))的純文本消息 799 22.3.4 在郵件地址中加上“界面友 好的”的名字 801 22.3.5 發(fā)送任意長(zhǎng)度的純文本 消息 802 22.3.6 發(fā)送帶有小附件(小于32767 字節(jié))的消息 803 22.3.7 以附件形式發(fā)送一個(gè)小文件 (小于32767字節(jié)) 805 22.3.8 任意大小的附件 805 22.4 使用基于Web的數(shù)據(jù) (HTTP) 808 22.4.1 “分片”獲得一個(gè)Web頁(yè)面 808 22.4.2 把頁(yè)面提取到一個(gè)LOB中 809 22.4.3 使用HTTP的用戶名/密碼 驗(yàn)證 810 22.4.4 獲取一個(gè)SSL加密的Web頁(yè)面 (使用HTTPS) 811 22.4.5 通過(guò)GET或者POST向Web頁(yè) 面提交數(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ù)庫(kù)管道、隊(duì)列、告警 817 22.5.2 TCPSocket 818 22.5.3 Oracle的內(nèi)置Web服務(wù)器 818 第6部分 高級(jí)PL/SQL主題 第23章 應(yīng)用系統(tǒng)安全與 PL/SQL 821 23.1 安全概述 821 23.2 加密 822 23.2.1 密鑰長(zhǎng)度 823 23.2.2 算法 824 23.2.3 填補(bǔ)和連接 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 使用消息驗(yàn)證碼 839 23.2.13 使用透明數(shù)據(jù)加密 (TDE) 841 23.2.14 透明的表空間加密 843 23.3 行級(jí)安全 844 23.3.1 為什么要學(xué)習(xí)RLS 846 23.3.2 一個(gè)簡(jiǎn)單的RLS示例 847 23.3.3 靜態(tài)與動(dòng)態(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í)別出非數(shù)據(jù)庫(kù)的用戶 867 23.5 細(xì)粒度審計(jì) 868 23.5.1 為什么要學(xué)習(xí)FGA 869 23.5.2 一個(gè)簡(jiǎn)單的FGA示例 870 23.5.3 訪問(wèn)多少列 872 23.5.4 查看審計(jì)跟蹤信息 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 一個(gè)示例 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ù)庫(kù)12c) 892 24.4.5 “誰(shuí)調(diào)用了我?”函數(shù) (Oracle數(shù)據(jù)庫(kù)12c) 895 24.4.6 視圖的BEQUEATH CURRENT_ USER子句(Oracle數(shù)據(jù)庫(kù) 12c) 895 24.4.7 調(diào)用者權(quán)限優(yōu)點(diǎn)的限制 (Oracle數(shù)據(jù)庫(kù)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 用查詢指令實(shí)現(xiàn)程序?qū)S?br /> 設(shè)置 906 24.5.7 使用預(yù)處理后的代碼 907 24.6 PL/SQL和數(shù)據(jù)庫(kù)實(shí)例 內(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 什么時(shí)候使用解釋模式 922 24.7.2 什么時(shí)候使用原生模式 922 24.7.3 原生編譯和數(shù)據(jù)庫(kù)版本 923 24.8 一些須知 923 第25章 PL/SQL的全球化和 本地化 925 25.1 概述和術(shù)語(yǔ) 926 25.2 Unicode入門(mén) 928 25.2.1 國(guó)家字符集的數(shù)據(jù)類型 929 25.2.2 字符編碼 929 25.2.3 和全球化支持相關(guān)的參數(shù) 930 25.2.4 Unicode函數(shù) 931 25.3 字符語(yǔ)義 938 25.4 字符串排序順序 941 25.4.1 二進(jìn)制排序 942 25.4.2 單語(yǔ)言排序 943 25.4.3 多語(yǔ)言排序 945 25.5 多語(yǔ)言信息檢索 946 25.5.1 信息檢索和PL/SQL 948 25.6 日期/時(shí)間 950 25.6.1 時(shí)間戳數(shù)據(jù)類型 951 25.6.2 日期/時(shí)間格式 952 25.7 貨幣轉(zhuǎn)換 955 25.8 PL/SQL的全球化開(kāi)發(fā) 工具箱 957 25.8.1 UTL_I18N工具包 957 25.8.2 UTL_LMS異常處理包 960 25.8.3 GDK實(shí)現(xiàn)選項(xiàng) 961 第26章 PL/SQL的面向?qū)ο?br /> 特性 963 26.1 Oracle對(duì)象特性的介紹 963 26.2 對(duì)象類型示例 965 26.2.1 創(chuàng)建一個(gè)基類 966 26.2.2 創(chuàng)建子類型 967 26.2.3 方法 968 26.2.4 在Oracle數(shù)據(jù)庫(kù)11g及以后 版本中調(diào)用父類的方法 972 26.2.5 保存、提取、使用持久化 對(duì)象 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 對(duì)象的比較 996 26.3 對(duì)象視圖 1001 26.3.1 一個(gè)關(guān)系型系統(tǒng)的示例 1002 26.3.2 帶有集合屬性的對(duì)象視圖 1003 26.3.3 對(duì)象子視圖 1006 26.3.4 帶有反關(guān)系的對(duì)象視圖 1008 26.3.5 INSTEAD OF觸發(fā)器 1008 26.3.6 對(duì)象視圖和對(duì)象表的區(qū)別 1010 26.4 維護(hù)對(duì)象類型和對(duì)象視圖 1012 26.4.1 數(shù)據(jù)字典 1012 26.4.2 權(quán)限 1013 26.5 來(lái)自一個(gè)關(guān)系開(kāi)發(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開(kāi)發(fā)和執(zhí)行的 權(quán)限 1020 27.3 一個(gè)簡(jiǎn)單的演示 1022 27.3.1 查找Java功能 1023 27.3.2 創(chuàng)建一個(gè)自定義Java類 1023 27.3.3 編譯和加載到Oracle 1025 27.3.4 創(chuàng)建一個(gè)PL/SQL的 包裝器 1026 27.3.5 從PL/SQL刪除文件 1027 27.4 使用loadjava 1028 27.5 使用dropjava 1030 27.6 管理數(shù)據(jù)庫(kù)中的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 長(zhǎng)名字 1032 27.7.2 GET_、SET_和RESET_ COMPILER_OPTION: 得到和設(shè)置(一些) 編譯器選項(xiàng) 1033 27.7.3 SET_OUTPUT:允許從 Java中輸出 1034 27.7.4 EXPORT_SOURCE、EXPORT_ RESOURCE和EXPORT_ CLASS:導(dǎo)出模式對(duì)象 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 擴(kuò)展文件I/O功能 1042 27.8.7 其他示例 1046 第28章 外部過(guò)程 1049 28.1 外部過(guò)程介紹 1050 28.1.1 示例:調(diào)用一個(gè)系統(tǒng)命令 1050 28.1.2 外部過(guò)程的架構(gòu) 1052 28.2 Oracle網(wǎng)絡(luò)配置 1053 28.2.1 定義監(jiān)聽(tīng)配置 1053 28.2.2 配置的安全特性 1055 28.3 設(shè)置多線程模式 1056 28.4 創(chuàng)建一個(gè)Oracle庫(kù) 1058 28.5 編寫(xiě)調(diào)用規(guī)范 1059 28.5.1 調(diào)用規(guī)范:整體語(yǔ)法 1060 28.5.2 參數(shù)映射:示例重溫 1061 28.5.3 參數(shù)映射:完整的內(nèi)容 1063 28.5.4 更多的語(yǔ)法:參數(shù)子句 1064 28.5.5 參數(shù)屬性 1065 28.6 從調(diào)用的C程序中引發(fā) 一個(gè)異常 1068 28.7 非默認(rèn)的代理 1071 28.8 維護(hù)外部過(guò)程 1073 28.8.1 刪除庫(kù) 1073 28.8.2 數(shù)據(jù)字典 1074 28.8.3 規(guī)則和警示 1074 附錄A 正則表達(dá)式元字符和函數(shù) 參數(shù) 1075 附錄B 數(shù)字格式模型 1080 附錄C 日期格式模型 1083
你還可能感興趣
我要評(píng)論
|