《Oracle PL/SQL程序设计》扫描版
基本信息
打开支付宝首页搜“673273051”领红包,领到大红包的小伙伴赶紧使用哦!
相关书籍
- 《Oracle数据库学习视频》[]
- 《尚学堂_马士兵_Oracle课程》开放式课程[]
- 《疯狂软件Oracle数据库视频》最新[WMV][]
- 《深度挖掘Oracle RAC数据库架构分析与实战攻略》电子书[]
- 《构建最高可用Oracle数据库系统Oracle 11gR2 RAC管理》[]
- 《Oracle DBA高效入职指南》电子书[]
- 《成功之路:ORACLE11g学习笔记》高清文字版[]
- 《剑破冰山Oracle开发艺术》电子书[]
- 《循序渐进Oracle数据库管理优化与备份恢复》电子书[]
- 《OracleDBA手记:数据库性能优化》高清文字版[]
内容介绍
目录:
目 录(上册)
第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 改进的应用程åºç§»æ¤èƒ½åŠ› 5
1.2.3 改进的执行授æƒå’Œäº‹åŠ¡ä¸€è‡´æ€§ 5
1.2.4 低调地起æ¥ï¼Œç¨³å®šåœ°å‰è¿› 6
1.3 这就是PL/SQL 6
1.3.1 与SQLæ•´åˆ 7
1.3.2 控制和æ¡ä»¶é€»è¾‘ 8
1.3.3 出现错误了 9
1.4 关于PL/SQL的版本 10
1.4.1 Oracleæ•°æ®åº“11g的新特性 12
1.5 PL/SQLå¼€å‘äººå‘˜çš„èµ„æº 15
1.5.1 O’Reilly PL/SQL系列 16
1.5.2 网络上的PL/SQL 17
1.6 一些建议 18
1.6.1 ä¸è¦å¤ªç€æ€¥ 18
1.6.2 ä¸è¦æ€•寻求帮助 19
1.6.3 采用一ç§åˆ›å»ºæ–°çš„甚至激进的方法 20
第2ç« åˆ›å»ºå¹¶è¿è¡ŒPL/SQL代ç 21
2.1 在数æ®åº“ä¸å¯¼èˆª 21
2.2 创建和编辑æºä»£ç 22
2.3 SQL*Plus 23
2.3.1 å¯åЍSQL*Plus 24
2.3.2 è¿è¡Œä¸€ä¸ªSQLè¯å¥ 26
2.3.3 è¿è¡ŒPL/SQLç¨‹åº 26
2.3.4 è¿è¡Œè„šæœ¬ 28
2.3.5 什么是“当å‰ç›®å½•†29
2.3.6 其他SQL*Plus任务 30
2.3.7 SQL*Plusä¸çš„é”™è¯¯å¤„ç† 34
2.3.8 喜欢或者讨厌SQL*Plusçš„åŽŸå› 34
2.4 执行必è¦çš„PL/SQL任务 35
2.4.1 创建å˜å‚¨è¿‡ç¨‹ 35
2.4.2 执行å˜å‚¨è¿‡ç¨‹ 39
2.4.3 显示å˜å‚¨è¿‡ç¨‹ 39
2.4.4 å˜å‚¨ç¨‹åºçš„æŽˆæƒå’Œåˆ«å 40
2.4.5 åˆ é™¤å˜å‚¨ç¨‹åº 41
2.4.6 éšè—å˜å‚¨è¿‡ç¨‹çš„æºä»£ç 41
2.5 编辑PL/SQL的环境 42
2.6 在其他è¯è¨€ä¸è°ƒç”¨PL/SQL 43
2.6.1 C:使用Oracle的预编译器(Pro*C) 44
2.6.2 Java:使用JDBC 45
2.6.3 Perl:使用Perl DBI和DBD::Oracle 46
2.6.4 PHP:使用Oracle扩展 47
2.6.5 PL/SQL Server Pages 48
2.6.6 å…¶ä»– 49
第3ç« è¯è¨€åŸºç¡€ 50
3.1 PL/SQLå—结构 50
3.1.1 匿åå— 52
3.1.2 命åå— 53
3.1.3 åµŒå¥—å— 54
3.1.4 作用范围 55
3.1.5 规范SQLè¯å¥ä¸æ‰€æœ‰å¯¹å˜é‡å’Œåˆ—的引用 56
3.1.6 å¯è§æ€§ 58
3.2 PL/SQLå—符集 61
3.3 æ ‡è¯†ç¬¦ 63
3.3.1 ä¿ç•™å— 64
3.3.2 ç©ºç™½å’Œå…³é”®è¯ 66
3.4 ç›´æŽ¥é‡ 66
3.4.1 NULL 67
3.4.2 在一个直接é‡å—符串ä¸åµŒå…¥å•å¼•å· 68
3.4.3 æ•°å—ç›´æŽ¥é‡ 69
3.4.4 å¸ƒå°”ç›´æŽ¥é‡ 70
3.5 分å·åˆ†éš”符 70
3.6 注释 70
3.6.1 å•è¡Œæ³¨é‡Šè¯æ³• 71
3.6.2 å¤šè¡Œæ³¨é‡Šè¯æ³• 71
3.7 PRAGMAå…³é”®å— 72
3.8 æ ‡ç¾ 73
第2部分 PL/SQL程åºç»“æž„
第4ç« æ¡ä»¶å’Œé¡ºåºæŽ§åˆ¶ 77
4.1 IFè¯å¥ 77
4.1.1 IF-THENç»„åˆ 78
4.1.2 IF-THEN-ELSEç»„åˆ 80
4.1.3 IF-THEN-ELSIFç»„åˆ 81
4.1.4 é¿å…IFè¯æ³•陷阱 82
4.1.5 嵌套的IFè¯å¥ 84
4.1.6 çŸè·¯æ±‚值 84
4.2 CASEè¯å¥å’Œè¡¨è¾¾å¼ 86
4.2.1 简å•çš„CASEè¯å¥ 87
4.2.2 æœç´¢åž‹CASEè¯å¥ 88
4.2.3 嵌套的CASEè¯å¥ 90
4.2.4 CASEè¡¨è¾¾å¼ 91
4.3 GOTOè¯å¥ 93
4.4 NULLè¯å¥ 94
4.4.1 å¢žåŠ ç¨‹åºçš„å¯è¯»æ€§ 94
4.4.2 åœ¨æ ‡ç¾ä¹‹åŽä½¿ç”¨NULL 95
第5ç« ç”¨å¾ªçŽ¯è¿›è¡Œè¿ä»£å¤„ç† 96
5.1 循环的基础知识 96
5.1.1 ä¸åŒå¾ªçŽ¯çš„ä¾‹å 97
5.1.2 PL/SQL循环结构 98
5.2 简å•循环 99
5.2.1 终æ¢ç®€å•循环:EXITå’ŒEXIT WHEN 100
5.2.2 模仿一个REPEAT UNTIL循环 101
5.2.3 äººä¸ºçš„æ— é™å¾ªçޝ 101
5.3 WHILE循环 103
5.4 数值型的FOR循环 104
5.4.1 使用数值型FOR循环的规则 105
5.4.2 数值型FOR循环的例å 105
5.4.3 处ç†éžå¹³æ»‘增长 106
5.5 æ¸¸æ ‡FOR循环 107
5.5.1 æ¸¸æ ‡åž‹FOR循环的例å 108
5.6 å¾ªçŽ¯çš„æ ‡ç¾ 109
5.7 CONTINUEè¯å¥ 110
5.8 è¿ä»£å¤„ç†çš„æŠ€å·§ 113
5.8.1 循环索引使用容易ç†è§£çš„åç§° 113
5.8.2 å¥½çš„é€€å‡ºæ–¹å¼ 114
5.8.3 获得FORå¾ªçŽ¯æ‰§è¡Œä¿¡æ¯ 115
5.8.4 循环å¼çš„SQLè¯å¥ 116
第6ç« å¼‚å¸¸å¤„ç† 118
6.1 å¼‚å¸¸å¤„ç†æ¦‚å¿µå’Œæœ¯è¯ 118
6.2 定义异常 120
6.2.1 声明有å异常 121
6.2.2 异常å称和错误代ç ç›¸äº’å…³è” 122
6.2.3 被命å的系统异常 125
6.2.4 异常的作用范围 127
6.3 抛出异常 128
6.3.1 RAISEè¯å¥ 128
6.3.2 使用RAISE_APPLICATION_ERROR 129
6.4 处ç†å¼‚常 130
6.4.1 内置的错误函数 132
6.4.2 在一个å•ç‹¬çš„å¥æŸ„ä¸åŒ…å«å¤šä¸ªå¼‚常 137
6.4.3 未处ç†çš„异常 137
6.4.4 ä¼ æ’æœªå¤„ç†å¼‚常 138
6.4.5 异常åŽç»§ç» 140
6.4.6 WHEN OTHERS的处ç†ä»£ç 142
6.5 æž„å»ºä¸€ä¸ªæœ‰æ•ˆçš„é”™è¯¯ç®¡ç†æž¶æž„ 144
6.5.1 确定异常管ç†ç–ç•¥ 145
6.5.2 组织好对应用专有错误代ç 的使用 148
6.5.3 ä½¿ç”¨æ ‡å‡†åŒ–çš„é”™è¯¯ç®¡ç†ç¨‹åº 149
6.5.4 使用自己的异常对象 151
6.5.5 创建通用错误处ç†çš„æ ‡å‡†æ¨¡æ¿ 153
6.6 充分利用PL/SQLé”™è¯¯ç®¡ç† 155
第3部分 PL/SQLæ•°æ®
第7ç« ä½¿ç”¨æ•°æ® 159
7.1 ç¨‹åºæ•°æ®çš„命å 159
7.2 PL/SQLæ•°æ®ç±»åž‹æ¦‚è¿° 161
7.2.1 å—ç¬¦æ•°æ® 162
7.2.2 æ•°å— 162
7.2.3 æ—¥æœŸã€æ—¶é—´æˆ³å’Œæ—¶é—´é—´éš” 163
7.2.4 布尔类型 164
7.2.5 二进制数æ®ç±»åž‹ 164
7.2.6 ROWIDs 165
7.2.7 REF CURSORs 165
7.2.8 Internetæ•°æ®ç±»åž‹ 165
7.2.9 “Anyâ€æ•°æ®ç±»åž‹ 166
7.2.10 用户定义数æ®ç±»åž‹ 166
7.3 ç¨‹åºæ•°æ®çš„声明 166
7.3.1 声明一个å˜é‡ 167
7.3.2 å£°æ˜Žå¸¸é‡ 168
7.3.3 NOT NULLè¯å¥ 168
7.3.4 锚定声明 168
7.3.5 æ¸¸æ ‡å’Œè¡¨çš„é”š 170
7.3.6 使用锚定声明的好处 171
7.3.7 NOT NULLæ•°æ®ç±»åž‹çš„锚 172
7.4 程åºå‘˜å®šä¹‰çš„å类型 173
7.5 æ•°æ®ç±»åž‹è½¬æ¢ 174
7.5.1 éšå¼ç±»åž‹è½¬æ¢ 174
7.5.2 显å¼ç±»åž‹è½¬æ¢ 176
第8ç« å—符串 182
8.1 å—符串类型 182
8.1.1 VARCHAR2æ•°æ®ç±»åž‹ 183
8.1.2 CHARæ•°æ®ç±»åž‹ 184
8.1.3 Stringå类型 185
8.2 使用å—符串 186
8.2.1 å—ç¬¦ä¸²å¸¸é‡ 186
8.2.2 ä¸å¯æ‰“å°å—符 187
8.2.3 拼接å—符串 188
8.2.4 处ç†å¤§å°å†™ 189
8.2.5 ä¼ ç»Ÿçš„æ£€ç´¢ã€æå–å’Œæ›¿æ¢ 192
8.2.6 è¡¥é½ 194
8.2.7 æ£åˆ™è¡¨è¾¾å¼çš„æ£€ç´¢ã€æå–å’Œæ›¿æ¢ 197
8.2.8 使用空å—符串 208
8.2.9 混用CHAR和VARCHAR2 210
8.3 å—符串函数快速å‚考 212
第9ç« æ•°å— 221
9.1 数值型数å—类型 221
9.1.1 NUMBER类型 222
9.1.2 PLS_INTEGER类型 227
9.1.3 BINARY_INTEGER类型 228
9.1.4 SIMPLE_INTEGER类型 228
9.1.5 BINARY_FLOAT和BINARY_DOUBLE类型 230
9.1.6 SIMPLE_FLOAT和SIMPLE_DOUBLE类型 235
9.1.7 æ•°å—å类型 235
9.2 æ•°å—è½¬æ¢ 237
9.2.1 TO_NUMBER函数 237
9.2.2 TO_CHAR函数 240
9.2.3 CAST函数 246
9.2.4 éšå¼è½¬æ¢ 246
9.3 æ•°å—è¿ç®—符 248
9.4 æ•°å—函数 249
9.4.1 å››èˆäº”入和截æ–函数 249
9.4.2 三角函数 250
9.4.3 æ•°å—函数的快速å‚考 250
第10ç« æ—¥æœŸå’Œæ—¶é—´æˆ³ 255
10.1 Datatimeæ•°æ®ç±»åž‹ 255
10.1.1 声明日期时间å˜é‡ 258
10.1.2 选择日期时间数æ®ç±»åž‹ 259
10.2 å¾—åˆ°å½“å‰æ—¥æœŸå’Œæ—¶é—´ 259
10.3 INTERVALæ•°æ®ç±»åž‹ 262
10.3.1 声明INTERVALå˜é‡ 263
10.3.2 什么时候使用INTERVAL 264
10.4 æ—¥æœŸæ—¶é—´è½¬æ¢ 266
10.4.1 从å—符串到日期时间 266
10.4.2 从日期时间到å—符串 269
10.4.3 使用时区 271
10.4.4 精确匹é…éœ€è¦æ ¼å¼æŽ©ç 274
10.4.5 è®©ç²¾ç¡®åŒ¹é…æ›´å®¹æ˜“ 275
10.4.6 解释滑动窗å£ä¸ä¸¤ä½æ•°å—的年份 275
10.4.7 æŠŠæ—¶åŒºè½¬æ¢æˆå—符串 276
10.4.8 ç”¨å¡«å……æ¨¡å¼æŠŠè¾“å‡ºè¡¥é½ 277
10.5 æ—¥æœŸå’Œæ—¶é—´æˆ³ç›´æŽ¥é‡ 278
10.6 æ—¶é—´é—´éš”çš„è½¬æ¢ 279
10.6.1 从数å—åˆ°æ—¶é—´é—´éš”çš„è½¬æ¢ 280
10.6.2 把å—ç¬¦ä¸²è½¬æ¢æˆé—´éš” 281
10.6.3 æ—¶é—´é—´éš”çš„æ ¼å¼åŒ–显示 281
10.7 æ—¶é—´é—´éš”ç›´æŽ¥é‡ 282
10.8 CASTå’ŒEXTRACT 284
10.8.1 CAST函数 284
10.8.2 EXTRACT函数 285
10.9 日期时间的算法 286
10.9.1 时间间隔和日期时间的算法 286
10.9.2 DATEæ•°æ®ç±»åž‹çš„æ—¥æœŸç®—法 287
10.9.3 计算两个日期时间之间的时间间隔 288
10.9.4 DATEå’ŒTIMESTAMPæ··åˆè®¡ç®— 290
10.9.5 æ—¶é—´é—´éš”çš„åŠ å‡è¿ç®— 291
10.9.6 时间间隔的乘除è¿ç®— 292
10.9.7 使用ä¸å—é™åˆ¶çš„æ—¶é—´é—´éš”类型 293
10.10 日期/时间函数的快速å‚考 294
第11ç« è®°å½•ç±»åž‹ 297
11.1 PL/SQLä¸çš„记录 297
11.1.1 使用记录的好处 298
11.1.2 声明记录 300
11.1.3 程åºå‘˜è‡ªå®šä¹‰çš„记录类型 301
11.1.4 使用记录类型 304
11.1.5 记录的比较 310
11.1.6 触å‘器伪记录 311
第12ç« é›†åˆ 313
12.1 é›†åˆæ¦‚è¿° 314
12.1.1 é›†åˆæ¦‚å¿µå’Œæœ¯è¯ 314
12.1.2 集åˆç±»åž‹ 316
12.1.3 集åˆç¤ºä¾‹ 317
12.1.4 使用集åˆçš„åœºåˆ 321
12.1.5 选择一个集åˆç±»åž‹ 326
12.2 é›†åˆæ–¹æ³•(内置) 327
12.2.1 COUNT方法 328
12.2.2 DELETE方法 329
12.2.3 EXISTS方法 330
12.2.4 EXTEND方法 331
12.2.5 FIRST和LAST方法 332
12.2.6 LIMIT方法 333
12.2.7 PRIOR和NEXT方法 333
12.2.8 TRIM方法 334
12.3 ä½¿ç”¨é›†åˆ 335
12.3.1 声明集åˆç±»åž‹ 336
12.3.2 集åˆå˜é‡çš„声明和åˆå§‹åŒ– 340
12.3.3 用数æ®å¡«å……é›†åˆ 345
12.3.4 访问集åˆå†…çš„æ•°æ® 350
12.3.5 使用å—ç¬¦ä¸²ç´¢å¼•çš„é›†åˆ 350
12.3.6 夿‚æ•°æ®ç±»åž‹çš„é›†åˆ 356
12.3.7 å¤šçº§é›†åˆ 359
12.3.8 在SQLä¸ä½¿ç”¨é›†åˆ 367
12.4 嵌套表的多é‡é›†åˆæ“作 372
12.4.1 测试嵌套表是å¦ç›¸ç‰åŠæˆå‘˜å±žæ€§ 374
12.4.2 æ£€æŸ¥å…ƒç´ æ˜¯å¦æ˜¯åµŒå¥—表的æˆå‘˜ 375
12.4.3 æ‰§è¡Œé«˜çº§é›†åˆæ“作 376
12.4.4 处ç†åµŒå¥—表ä¸çš„é‡å¤æ•°æ® 377
12.5 模å¼çº§åˆ«é›†åˆçš„维护 379
12.5.1 必需的æƒé™ 379
12.5.2 集åˆå’Œæ•°æ®å—å…¸ 379
第13ç« å…¶ä»–æ•°æ®ç±»åž‹ 381
13.1 BOLEAN类型 381
13.2 RAWæ•°æ®ç±»åž‹ 382
13.3 UROWIDå’ŒROWIDæ•°æ®ç±»åž‹ 383
13.3.1 获得ROWID 384
13.3.2 使用ROWID 384
13.4 LOBæ•°æ®ç±»åž‹ 386
13.5 使用LOB 387
13.5.1 ç†è§£LOB定ä½ç¬¦ 389
13.5.2 LOB的空和NULL 390
13.5.3 å‘LOBä¸å†™å…¥æ•°æ® 392
13.5.4 读å–LOBæ•°æ® 395
13.5.5 BFILEä¸åŒäºŽå…¶ä»– 396
13.5.6 SecureFileså’ŒBasicFiles 401
13.5.7 临时LOB 403
13.5.8 原生的LOBæ“作 406
13.5.9 LOB转æ¢å‡½æ•° 410
13.6 预定义的对象类型 411
13.6.1 XMLType类型 411
13.6.2 URI类型 415
13.6.3 Any类型 417
第4部分 PL/SQLä¸çš„SQL
第14ç« DMLå’Œäº‹åŠ¡ç®¡ç† 423
14.1 PL/SQLä¸çš„DML 424
14.1.1 DMLè¯å¥çš„快速入门 424
14.1.2 DMLæ“ä½œçš„æ¸¸æ ‡å±žæ€§ 428
14.1.3 从DMLè¯å¥è¿”å›žä¿¡æ¯ 429
14.1.4 DMLå’Œå¼‚å¸¸å¤„ç† 430
14.1.5 DML和记录 431
14.2 äº‹åŠ¡ç®¡ç† 434
14.2.1 COMMITè¯å¥ 434
14.2.2 ROLLBACKè¯å¥ 435
14.2.3 SAVEPOINTè¯å¥ 436
14.2.4 SET TRANSACTION命令 436
14.2.5 LOCK TABLEè¯å¥ 437
14.3 自治事务 438
14.3.1 定义自治事务 438
14.3.2 自治事务的规则和é™åˆ¶ 439
14.3.3 事务的å¯è§æ€§ 440
14.3.4 什么时候使用自治事务 440
14.3.5 构建一个自治的日志机制 441
第15ç« æ•°æ®æå– 444
15.1 æ¸¸æ ‡åŸºç¡€ 445
15.1.1 ä¸€äº›æœ‰å…³æ•°æ®æå–çš„æœ¯è¯ 446
15.1.2 典型的查询æ“作 447
15.1.3 æ¸¸æ ‡å±žæ€§ä»‹ç» 448
15.1.4 åœ¨æ¸¸æ ‡ä¸ä½¿ç”¨PL/SQLå˜é‡ 451
15.1.5 åœ¨æ˜¾å¼æ¸¸æ ‡å’Œéšå¼æ¸¸æ ‡é—´åšé€‰æ‹© 451
15.2 使用éšå¼æ¸¸æ ‡ 452
15.2.1 éšå¼æ¸¸æ ‡çš„例å 453
15.2.2 éšå¼æ¸¸æ ‡çš„å¼‚å¸¸å¤„ç† 454
15.2.3 éšå¼SQLçš„æ¸¸æ ‡å±žæ€§ 456
15.3 ä½¿ç”¨æ˜¾å¼æ¸¸æ ‡ 458
15.3.1 å£°æ˜Žæ˜¾å¼æ¸¸æ ‡ 459
15.3.2 æ‰“å¼€æ˜¾å¼æ¸¸æ ‡ 462
15.3.3 ä»Žæ˜¾å¼æ¸¸æ ‡ä¸æå–æ•°æ® 463
15.3.4 æ˜¾å¼æ¸¸æ ‡ä¸çš„列别å 464
15.3.5 关闿˜¾å¼æ¸¸æ ‡ 465
15.3.6 æ˜¾å¼æ¸¸æ ‡çš„属性 467
15.3.7 æ¸¸æ ‡å‚æ•° 469
15.4 SELECT…FOR UPDATE 472
15.4.1 用COMMIT释放é”èµ„æº 473
15.4.2 WHERE CURRENT OFè¯å¥ 474
15.5 æ¸¸æ ‡å˜é‡å’ŒREF CURSOR 475
15.5.1 ä¸ºä»€ä¹ˆç”¨æ¸¸æ ‡å˜é‡ 476
15.5.2 å’Œé™æ€æ¸¸æ ‡çš„相åŒç‚¹ 477
15.5.3 声明REF CURSOR类型 478
15.5.4 å£°æ˜Žæ¸¸æ ‡å˜é‡ 478
15.5.5 æ‰“å¼€æ¸¸æ ‡å˜é‡ 479
15.5.6 ä»Žä¸€ä¸ªæ¸¸æ ‡å˜é‡èŽ·å–æ•°æ® 480
15.5.7 æ¸¸æ ‡å˜é‡çš„使用规则 483
15.5.8 æ¸¸æ ‡å˜é‡ä½œä¸ºå‚æ•°ä¼ é€’ 486
15.5.9 æ¸¸æ ‡å˜é‡çš„约æŸé™åˆ¶ 488
15.6 æ¸¸æ ‡è¡¨è¾¾å¼ 488
15.6.1 ä½¿ç”¨æ¸¸æ ‡è¡¨ç¤ºå¼ 489
15.6.2 æ¸¸æ ‡è¡¨è¾¾å¼çš„约æŸé™åˆ¶ 491
第16ç« åŠ¨æ€SQL和动æ€PL/SQL 492
16.1 NDSè¯å¥ 493
16.1.1 EXECUTE IMMEDIATEè¯å¥ 493
16.1.2 OPEN FORè¯å¥ 496
16.1.3 4ç§åЍæ€SQL方法 502
16.2 绑定å˜é‡ 503
16.2.1 傿•°æ¨¡å¼ 504
16.2.2 é‡å¤çš„å ä½ç¬¦ 506
16.2.3 NULLå€¼çš„ä¼ é€’ 507
16.3 ä½¿ç”¨å¯¹è±¡å’Œé›†åˆ 508
16.4 动æ€PL/SQL 510
16.4.1 构建动æ€PL/SQLå— 511
16.4.2 用动æ€å—替æ¢é‡å¤çš„代ç 513
16.5 NDS的建议 513
16.5.1 对于共享的程åºä½¿ç”¨è°ƒç”¨è€…æƒé™ 514
16.5.2 预估并处ç†åЍæ€çš„错误 514
16.5.3 ä½¿ç”¨ç»‘å®šè€Œä¸æ˜¯æ‹¼æŽ¥ 516
16.5.4 æŠŠä»£ç æ³¨å…¥çš„风险最å°åŒ– 518
16.6 什么时候使用DBMS_SQL 521
16.6.1 è§£æžéžå¸¸é•¿çš„å—符串 521
16.6.2 å¾—åˆ°æŸ¥è¯¢çš„åˆ—çš„ä¿¡æ¯ 522
16.6.3 实现第4ç§æ–¹æ³•的动æ€SQL的需求 524
16.6.4 æŠŠåŠ¨æ€æ¸¸æ ‡çš„è§£æžæœ€å°åŒ– 530
16.7 Oracleæ•°æ®åº“11g新特性 532
16.7.1 DBMS_SQL.TO_REFCURSOR函数 532
16.7.2 DBMS_SQL.TO_CURSOR函数 534
16.7.3 DBMS_SQL的安全性增强 536
目 录(下册)
第5部分 æž„é€ PL/SQL应用程åº
第17ç« è¿‡ç¨‹ã€å‡½æ•°ä¸Žå‚æ•° 543
17.1 ä»£ç æ¨¡å—化 543
17.2 过程 545
17.2.1 调用一个过程 547
17.2.2 过程的头部 548
17.2.3 过程体 548
17.2.4 ENDæ ‡ç¾ 548
17.2.5 RETURNè¯å¥ 549
17.3 函数 549
17.3.1 函数的结构 549
17.3.2 返回的数æ®ç±»åž‹ 552
17.3.3 ENDæ ‡ç¾ 552
17.3.4 调用函数 553
17.3.5 ä¸å¸¦å‚数的函数 554
17.3.6 函数的头部 554
17.3.7 函数体 555
17.3.8 RETURNè¯å¥ 555
17.4 傿•° 557
17.4.1 å®šä¹‰å‚æ•° 558
17.4.2 å½¢å‚å’Œå®žå‚ 558
17.4.3 傿•°æ¨¡å¼ 559
17.4.4 在PL/SQL䏿˜Žç¡®åœ°æŠŠå½¢å‚和实å‚å…³è”在一起 562
17.4.5 NOCOPY傿•°æ¨¡å¼é™å®šç¬¦ 566
17.4.6 缺çœå€¼ 566
17.5 å±€éƒ¨æˆ–è€…åµŒå¥—æ¨¡å— 567
17.5.1 使用局部模å—的好处 568
17.5.2 局部模å—的作用范围 571
17.5.3 用局部模å—è®©æˆ‘ä»¬çš„ä»£ç æ›´æ•´æ´ 571
17.6 模å—é‡è½½ 572
17.6.1 使用é‡è½½çš„好处 573
17.6.2 é‡è½½çš„é™åˆ¶ 576
17.6.3 关于数å—类型的é‡è½½ 576
17.7 å‰ç½®å£°æ˜Ž 577
17.8 高级主题 579
17.8.1 在SQLä¸è°ƒç”¨æˆ‘们的函数 579
17.8.2 表函数 581
17.8.3 确定性函数 591
17.9 把模å—化进行到底 592
第18ç« åŒ… 593
18.1 为什么是包? 593
18.1.1 演示包的能力 594
18.1.2 有关包的一些概念 597
18.1.3 å›¾ç¤ºç§æœ‰æ€§ 599
18.2 构建包的规则 599
18.2.1 包规范 600
18.2.2 包体 601
18.2.3 包的åˆå§‹åŒ– 603
18.3 包æˆå‘˜çš„调用规则 607
18.4 ä½¿ç”¨åŒ…æ•°æ® 608
18.4.1 在一个Oracle会è¯å†…全局å¯è§ 609
18.4.2 å…¨å±€å…¬æœ‰æ•°æ® 609
18.4.3 åŒ…æ¸¸æ ‡ 610
18.4.4 包的串行化 614
18.5 何时使用包 617
18.5.1 å°è£…对数æ®çš„访问 617
18.5.2 é¿å…直接é‡çš„硬编ç 620
18.5.3 改善内置特性的å¯ç”¨æ€§ 622
18.5.4 把逻辑上相关的功能组织在一起 623
18.5.5 缓å˜é™æ€çš„ä¼šè¯æ•°æ® 624
18.6 包和对象类型 624
第19ç« è§¦å‘器 626
19.1 DML触å‘器 627
19.1.1 DML触å‘器的概念 628
19.1.2 创建DML触å‘器 630
19.1.3 DML触å‘器的例å:ä¸è®¸ä½œå¼Šï¼ 635
19.1.4 åŒä¸€ç±»åž‹çš„多个触å‘器 641
19.1.5 何去何从 642
19.1.6 çªå˜è¡¨çš„错误 644
19.1.7 å¤åˆè§¦å‘器:èšé›†ä¸€å ‚ 645
19.2 DDL触å‘器 648
19.2.1 创建DDL触å‘器 649
19.2.2 å¯ç”¨äº‹ä»¶ 651
19.2.3 å¯ç”¨å±žæ€§ 652
19.2.4 使用事件和属性 653
19.2.5 åˆ é™¤ä¸å¯åˆ 除的 657
19.2.6 INSTEAD OF CREATE 触å‘器 657
19.3 æ•°æ®åº“事件触å‘器 659
19.3.1 创建数æ®åº“事件触å‘器 659
19.3.2 STARTUP触å‘器 660
19.3.3 SHUTDOWN触å‘器 661
19.3.4 LOGON触å‘器 661
19.3.5 LOGOFF触å‘器 661
19.3.6 SERVERERROR触å‘器 662
19.4 INSTEAD OF触å‘器 666
19.4.1 创建INSTEAD OF触å‘器 666
19.4.2 INSTEAD OF INSERT触å‘器 668
19.4.3 INSTEAD OF UPDATE触å‘器 670
19.4.4 INSTEAD OF DELETE触å‘器 671
19.4.5 填充表 671
19.4.6 嵌套表的INSTEAD OF触å‘器 672
19.5 AFTER SUSPEND触å‘器 674
19.5.1 构建AFTER SUSPEND触å‘器 674
19.5.2 看看真实的触å‘器 676
19.5.3 ORA_SPACE_ERROR_INFO函数 677
19.5.4 DBMS_RESUMABLE包 678
19.5.5 æ•获多个时间 679
19.5.6 该ä¸è¯¥å¤„ç†ï¼Ÿ 680
19.6 管ç†è§¦å‘器 680
19.6.1 ç¦ç”¨ã€å¯ç”¨ä»¥åŠåˆ 除触å‘器 680
19.6.2 创建一个ç¦ç”¨çš„触å‘器 681
19.6.3 查看触å‘器 682
19.6.4 检查触å‘器的有效性 684
第20ç« ç®¡ç†PL/SQL代ç 685
20.1 ç®¡ç†æ•°æ®åº“内的代ç 686
20.1.1 æ•°æ®å—典视图概述 687
20.1.2 显示å˜å‚¨å¯¹è±¡çš„ä¿¡æ¯ 688
20.1.3 æºä»£ç 的显示和æœç´¢ 689
20.1.4 æ ¹æ®ç¨‹åºçš„大å°ç¡®å®šPinning需求 691
20.1.5 获得å˜å‚¨ä»£ç 的属性 692
20.1.6 通过视图分æžå’Œæ›´æ”¹è§¦å‘å™¨çŠ¶æ€ 693
20.1.7 分æžå‚æ•°ä¿¡æ¯ 693
20.1.8 åˆ†æžæ ‡è¯†ç¬¦çš„使用(Oracle æ•°æ®åº“11gçš„PL/Scope) 695
20.2 ä¾èµ–关系的管ç†ä»¥åŠä»£ç çš„é‡ç¼–译 697
20.2.1 通过数æ®å—典视图分æžä¾èµ–关系 698
20.2.2 细粒度ä¾èµ–(Oracleæ•°æ®åº“11g) 702
20.2.3 远程ä¾èµ– 703
20.2.4 Oracle的远程调用模å¼çš„é™åˆ¶ 706
20.2.5 失效的程åºå•元的é‡ç¼–译 707
20.3 编译时刻è¦å‘Š 711
20.3.1 一个入门例å 711
20.3.2 å¯ç”¨ç¼–译时刻è¦å‘Š 712
20.3.3 一些有用的è¦å‘Š 714
20.4 PL/SQL程åºçš„æµ‹è¯• 722
20.4.1 典型的ã€åŽè€Œä¸å®žçš„æµ‹è¯•技术 723
20.4.2 PL/SQLä»£ç æµ‹è¯•的一般建议 726
20.4.3 PL/SQL的自动测试选项 727
20.4.4 用utPLSQL测试 728
20.4.5 用Quest Code Tester for Oracle测试 730
20.5 跟踪PL/SQL的执行 732
20.5.1 DBMS_APPLICATION_INFO 734
20.5.2 Quest Error Manager跟踪 736
20.5.3 DBMS_TRACE功能 738
20.6 PL/SQL程åºçš„调试 741
20.6.1 错误的调试方法 741
20.6.2 调试技巧和ç–ç•¥ 743
20.7 ä¿æŠ¤å˜å‚¨è¿‡ç¨‹ä»£ç 747
20.7.1 包装的约æŸå’Œé™åˆ¶ 747
20.7.2 使用包装功能 748
20.7.3 通过DBMS_DDL动æ€åŒ…装 748
20.7.4 包装过的代ç çš„ä½¿ç”¨æŒ‡å— 749
20.8 基于版本的é‡å®šä¹‰(Oracleæ•°æ®åº“11g R2版本) 750
第21ç« PL/SQL的性能优化 753
21.1 辅助优化的工具 754
21.1.1 内å˜ä½¿ç”¨åˆ†æž 755
21.1.2 å‘现PL/SQL代ç ä¸çš„瓶颈所在 755
21.1.3 计算消耗时间 760
21.1.4 é€‰æ‹©æœ€å¿«çš„ç¨‹åº 762
21.1.5 é¿å…æ— é™å¾ªçޝ 763
21.1.6 性能相关è¦å‘Š 764
21.2 优化过的编译器 765
21.2.1 ä¼˜åŒ–å™¨çš„å·¥ä½œåŽŸç† 766
21.2.2 循环Fetchæ“作的è¿è¡Œæ—¶ä¼˜åŒ– 769
21.3 æ•°æ®ç¼“å˜æŠ€æœ¯ 770
21.3.1 åŸºäºŽåŒ…çš„ç¼“å˜ 771
21.3.2 ç¡®å®šæ€§å‡½æ•°çš„ç¼“å˜ 776
21.3.3 函数结果缓å˜(Oracleæ•°æ®åº“11g) 778
21.3.4 ç¼“å˜æ€»ç»“ 790
21.4 多行SQLçš„æ‰¹å¤„ç† 790
21.4.1 通过BULK COLLECTåŠ é€ŸæŸ¥è¯¢ 792
21.4.2 通过FORALLåŠ é€ŸDML 798
21.5 利用管é“化的表函数æå‡æ€§èƒ½ 808
21.5.1 用基于管é“åŒ–å‡½æ•°çš„åŠ è½½æ–¹å¼æ›¿æ¢åŸºäºŽè¡Œçš„æ’å…¥ 809
21.5.2 用管é“函数调优Mergeæ“作 816
21.5.3 用并行管é“函数进行异æ¥çš„æ•°æ®å¸è½½ 818
21.5.4 并行管é“函数ä¸çš„分区åå¥å’Œæµåå¥å¯¹æ€§èƒ½çš„å½±å“ 822
21.5.5 管é“å‡½æ•°å’ŒåŸºäºŽæˆæœ¬çš„优化器 823
21.5.6 用管é“å‡½æ•°ä¼˜åŒ–å¤æ‚的数æ®åŠ è½½ 829
21.5.7 管é“函数结æŸè¯ 836
21.6 专用的优化技术 837
21.6.1 使用NOCOPY傿•°æ¨¡å¼æç¤ºç¬¦ 837
21.6.2 使用æ£ç¡®çš„æ•°æ®ç±»åž‹ 840
21.7 回顾性能 841
第22ç« I/Oæ“作和PL/SQL 843
22.1 æ˜¾ç¤ºä¿¡æ¯ 843
22.1.1 å¯ç”¨DBMS_OUTPUT 844
22.1.2 å‘缓å˜ä¸å†™å…¥è¡Œ 844
22.1.3 从缓å˜ä¸è¯»å–内容 845
22.2 文件的读写 846
22.2.1 UTL_FILE_DIR傿•° 847
22.2.2 使用Oracle目录 848
22.2.3 打开文件 850
22.2.4 æ–‡ä»¶å·²ç»æ‰“开了å—? 852
22.2.5 关闿–‡ä»¶ 852
22.2.6 è¯»å–æ–‡ä»¶ 853
22.2.7 呿–‡ä»¶ä¸å†™ 855
22.2.8 æ‹·è´æ–‡ä»¶ 858
22.2.9 åˆ é™¤æ–‡ä»¶ 859
22.2.10 文件改å和文件移动 859
22.2.11 æå–文件属性 860
22.3 å‘é€é‚®ä»¶ 861
22.3.1 Oracleçš„å‰ææ¡ä»¶ 862
22.3.2 é…置网络安全 863
22.3.3 å‘é€ä¸€ä¸ªçŸçš„(32 767或者更少)çš„çº¯æ–‡æœ¬æ¶ˆæ¯ 863
22.3.4 在邮件地å€ä¸åŠ ä¸Šâ€œå‹å¥½â€çš„åå— 865
22.3.5 å‘é€ä»»æ„é•¿åº¦çš„çº¯æ–‡æœ¬æ¶ˆæ¯ 866
22.3.6 å‘é€å¸¦æœ‰å°é™„ä»¶(<32 767)çš„æ¶ˆæ¯ 867
22.3.7 以附件形å¼å‘é€ä¸€ä¸ªå°æ–‡ä»¶(<32 767) 869
22.3.8 ä»»æ„大å°çš„附件 870
22.4 使用Webæ•°æ®(HTTP) 872
22.4.1 “分片â€èŽ·å¾—ä¸€ä¸ªWebé¡µé¢ 873
22.4.2 æŠŠé¡µé¢æå–到一个LOBä¸ 874
22.4.3 使用HTTP的用户å/密ç éªŒè¯ 875
22.4.4 获å–一个SSLåŠ å¯†çš„Web页é¢(通过HTTPS) 876
22.4.5 通过GET或者POST给一个Webé¡µé¢æäº¤æ•°æ® 877
22.4.6 ç¦ç”¨Cookies或者CookiesæŒä¹…化 881
22.4.7 从FTPæœåŠ¡å™¨èŽ·å–æ•°æ® 881
22.4.8 ä½¿ç”¨ä»£ç†æœåС噍 882
22.5 PL/SQLä¸å¯ç”¨çš„å…¶ä»–I/O类型 882
22.5.1 æ•°æ®åº“管é“ã€é˜Ÿåˆ—ã€å‘Šè¦ 883
22.5.2 TCP Socket 883
22.5.3 Oracle的内置WebæœåС噍 883
第6部分 高级PL/SQL主题
第23ç« åº”ç”¨å®‰å…¨ä¸ŽPL/SQL 887
23.1 安全概述 887
23.2 åŠ å¯† 888
23.2.1 密钥长度 890
23.2.2 算法 890
23.2.3 填补和连接 892
23.2.4 DBMS_CRYPTO包 892
23.2.5 æ•°æ®åР坆 894
23.2.6 LOBçš„åŠ å¯† 897
23.2.7 安全文件 897
23.2.8 æ•°æ®è§£å¯† 898
23.2.9 生æˆå¯†é’¥ 899
23.2.10 å¯†é’¥ç®¡ç† 900
23.2.11 åŠ å¯†æ•£åˆ— 905
23.2.12 使用消æ¯éªŒè¯ç 907
23.2.13 ä½¿ç”¨é€æ˜Žæ•°æ®åР坆(TDE) 908
23.2.14 逿˜Žçš„è¡¨ç©ºé—´åŠ å¯† 910
23.3 行级安全 912
23.3.1 为什么è¦å¦ä¹ RLS 914
23.3.2 一个简å•çš„RLS示例 915
23.3.3 使用动æ€ç–ç•¥ 919
23.3.4 ä½¿ç”¨åˆ—æ•æ„Ÿçš„RLS 923
23.3.5 RLS调试 927
23.4 应用程åºä¸Šä¸‹æ–‡ 930
23.4.1 使用应用程åºä¸Šä¸‹æ–‡ 931
23.4.2 上下文的安全 932
23.4.3 把上下文用作RLSçš„è°“è¯æ¡ä»¶ 933
23.4.4 è¯†åˆ«å‡ºéžæ•°æ®åº“的用户 936
23.5 细粒度审计 938
23.5.1 为什么è¦å¦ä¹ FGA 939
23.5.2 一个简å•çš„FGA示例 940
23.5.3 访问多少列 942
23.5.4 æŸ¥çœ‹å®¡è®¡è·Ÿè¸ªä¿¡æ¯ 943
23.5.5 使用绑定å˜é‡ 943
23.5.6 ä½¿ç”¨å¥æŸ„æ¨¡å— 945
第24ç« PL/SQLæž¶æž„ 947
24.1 DIANA是è°(或者是什么) 947
24.2 Oracle是如何执行PL/SQL代ç çš„ 948
24.2.1 一个例å 949
24.2.2 编译器的é™åˆ¶ 952
24.3 PL/SQL的缺çœåŒ… 952
24.4 执行æƒé™æ¨¡åž‹ 955
24.4.1 定义者æƒé™æ¨¡åž‹ 956
24.4.2 调用者æƒé™æ¨¡å¼ 960
24.4.3 ç»„åˆæƒé™æ¨¡åž‹ 962
24.5 æ¡ä»¶ç¼–译 963
24.5.1 æ¡ä»¶ç¼–译的例å 964
24.5.2 查询指令 965
24.5.3 $IF指令 968
24.5.4 $ERROR指令 970
24.5.5 把代ç 和包常é‡åŒæ¥ 970
24.5.6 用查询指令实现程åºä¸“有设置 971
24.5.7 使用预处ç†åŽçš„代ç 972
24.6 PL/SQL和数æ®åº“å®žä¾‹å†…å˜ 974
24.6.1 PGAã€UGAå’ŒCGA 974
24.6.2 æ¸¸æ ‡ã€å†…å˜åŠå…¶ä»– 975
24.6.3 å‡å°‘内å˜ç”¨çš„æŠ€å·§ 977
24.6.4 如果内å˜ç”¨å…‰äº†è¯¥æ€Žä¹ˆåŠž 987
24.7 原生å¼ç¼–译 990
24.7.1 ä»€ä¹ˆæ—¶å€™ä½¿ç”¨è§£é‡Šæ¨¡å¼ 990
24.7.2 ä»€ä¹ˆæ—¶å€™ä½¿ç”¨åŽŸç”Ÿæ¨¡å¼ 991
24.7.3 原生编译和数æ®åº“版本 991
24.8 我们需è¦çŸ¥é“çš„ 991
第25ç« PL/SQL的全çƒåŒ–和本地化 993
25.1 æ¦‚è¿°å’Œæœ¯è¯ 995
25.2 Unicode入门 996
25.2.1 国家å—符集的数æ®ç±»åž‹ 998
25.2.2 å—符编ç 998
25.2.3 和全çƒåŒ–支æŒç›¸å…³çš„傿•° 999
25.2.4 Unicode 函数 1000
25.3 å—符è¯ä¹‰ 1007
25.4 å—符串排åºé¡ºåº 1011
25.4.1 äºŒè¿›åˆ¶æŽ’åº 1012
25.4.2 å•è¯è¨€æŽ’åº 1013
25.4.3 多è¯è¨€æŽ’åº 1015
25.5 多è¯è¨€ä¿¡æ¯æ£€ç´¢ 1016
25.5.1 ä¿¡æ¯æ£€ç´¢å’ŒPL/SQL 1018
25.6 日期/时间 1021
25.6.1 时间戳数æ®ç±»åž‹ 1021
25.6.2 日期/æ—¶é—´æ ¼å¼ 1022
25.7 è´§å¸è½¬æ¢ 1026
25.8 PL/SQL的全çƒåŒ–å¼€å‘工具箱 1028
25.8.1 UTL_I18N工具包 1028
25.8.2 UTL_LMS异常处ç†åŒ… 1031
25.8.3 GDK实现选项 1032
第26ç« PL/SQLçš„é¢å‘对象特性 1034
26.1 Oracleå¯¹è±¡ç‰¹æ€§çš„ä»‹ç» 1034
26.2 对象类型示例 1036
26.2.1 创建一个基类 1037
26.2.2 创建å类型 1039
26.2.3 方法 1040
26.2.4 在Oracleæ•°æ®åº“11gä¸è°ƒç”¨çˆ¶ç±»çš„æ–¹æ³• 1045
26.2.5 ä¿å˜ã€æå–ã€ä½¿ç”¨æŒä¹…化对象 1046
26.2.6 æ¼”å˜å’Œåˆ›å»º 1054
26.2.7 回到指针å—? 1056
26.2.8 泛化数æ®ï¼šANY类型 1063
26.2.9 我也å¯ä»¥è‡ªå·±åš 1067
26.2.10 对象的比较 1071
26.3 对象视图 1075
26.3.1 一个示例的关系系统 1077
26.3.2 带有集åˆå±žæ€§çš„对象视图 1078
26.3.3 对象å视图 1081
26.3.4 带有å关系的对象视图 1083
26.3.5 INSTEAD OF触å‘器 1084
26.3.6 对象视图和对象表的区别 1086
26.4 维护对象类型和对象视图 1087
26.4.1 æ•°æ®å—å…¸ 1087
26.4.2 æƒé™ 1089
26.5 æ¥è‡ªä¸€ä¸ªå…³ç³»å¼€å‘者的总结æ€è€ƒ 1091
附录A æ£åˆ™è¡¨è¾¾å¼çš„å…ƒå—ç¬¦å’Œå‡½æ•°å‚æ•° 1093
A.1 å…ƒå—符 1093
A.2 å‡½æ•°å’Œå‚æ•° 1096
A.2.1 æ£åˆ™è¡¨è¾¾å¼å‡½æ•° 1096
A.2.2 æ£åˆ™è¡¨è¾¾å¼å‚æ•° 1097
附录B æ•°å—æ ¼å¼æ¨¡åž‹ 1099
附录C æ—¥æœŸæ ¼å¼æ¨¡åž‹ 1102
