
精通Oracle Database 12c SQL & PL/SQL编程(第3版)
《精通Oracle Database 12c SQL & PL/SQL编程(第3版)》是2014年出版的图书,作者是美国作家Jason Price。
基本介绍
- 书名:精通Oracle Database 12c SQL & PL/SQL编程(第3版)
- 作者:[美]Jason Price
- 译者:卢涛
- ISBN:9787302365983
- 定价:79.8元
- 出版时间:2014-6-17
- 装帧:平装
图书详细信息
精通Oracle Database 12c SQL & PL/SQL编程(第3版)
作者:[美]Jason Price 着 卢涛 译 ISBN:9787302365983
定价:79.8元
印次:1-1
装帧:平装
定价:79.8元
印次:1-1
装帧:平装
印刷日期:2014-6-17
图书简介
学习通过编写SQL语句并构建PL/SQL程式来访问Oracle资料库。《精通OracleDatabase12cSQL&PL/SQL编程(第3版)》完全涵盖了最新版本Oracle资料库的功能和技术,指导读者编写SQL语句以检索和修改资料库中的信息、掌握SQL*Plus和SQLDeveloper、处理资料库对象、编写PL/SQL程式、採用性能最佳化技术、结合XML以及其他技术。这本Oracle指南包含掌握SQL所需的全部知识。
目录
第1章简介 1
1.1关係资料库简介 1
1.2SQL简介 2
1.3使用SQL*Plus 4
1.3.1启动SQL*Plus 4
1.3.2从命令行启动SQL*Plus 4
1.3.3使用SQL*Plus执行SELECT语句 5
1.4使用SQLDeveloper 6
1.5创建store模式 8
1.5.1检查脚本 8
1.5.2运行脚本 10
1.5.3用来创建store模式的DDL语句 11
1.6添加、修改和删除行 17
1.6.1向表中添加行 17
1.6.2修改表中的现有行 19
1.6.3从表中删除行 20
1.7连线资料库和下线 20
1.8退出SQL*Plus 20
1.9OraclePL/SQL简介 21
1.10小结 22
第2章从资料库表中检索信息 23
2.1对单表执行SELECT语句 24
2.2选择一个表中的所有列 24
2.3使用WHERE子句限定行 25
2.4行标识符 25
2.5行号 26
2.6执行算术运算 26
2.6.1执行日期运算 27
2.6.2列运算 28
2.6.3算术运算操作符的优先权 29
2.7使用列别名 29
2.8使用连线操作合併列的输出结果 30
2.9空值 31
2.10禁止显示重複行 32
2.11比较值 33
2.11.1使用不等于操作符 33
2.11.2使用大于操作符 34
2.11.3使用小于或等于操作符 34
2.11.4使用ANY操作符 34
2.11.5使用ALL操作符 35
2.12使用SQL操作符 35
2.12.1使用LIKE操作符 36
2.12.2使用IN操作符 37
2.12.3使用BETWEEN操作符 38
2.13使用逻辑操作符 38
2.13.1使用AND操作符 38
2.13.2使用OR操作符 39
2.14逻辑操作符的优先权 39
2.15使用ORDERBY子句对行进行排序 40
2.16执行使用两个表的SELECT语句 41
2.17使用表别名 43
2.18笛卡尔积 43
2.19执行使用多于两个表的SELECT语句 44
2.20连线条件和连线类型 45
2.20.1不等连线 46
2.20.2外连线 46
2.20.3自连线 50
2.21使用SQL/92语法执行连线 51
2.21.1使用SQL/92标準语法执行两个表的内连线 51
2.21.2使用USING关键字简化连线 51
2.21.3使用SQL/92执行多于两个表的内连线 52
2.21.4使用SQL/92执行多列的内连线 53
2.21.5使用SQL/92执行外连线 53
2.21.6使用SQL/92执行自连线 55
2.21.7使用SQL/92执行交叉连线 55
2.22小结 55
第3章使用SQL*Plus 57
3.1查看錶的结构 58
3.2编辑SQL语句 58
3.3保存、检索并运行档案 60
3.4格式化列 63
3.5设定页面大小 65
3.6设定行大小 66
3.7清除列的格式 67
3.8使用变数 67
3.8.1临时变数 67
3.8.2已定义变数 70
3.9创建简单报表 73
3.9.1在脚本中使用临时变数 73
3.9.2在脚本中使用已定义变数 73
3.9.3向脚本中的变数传递值 74
3.9.4添加页眉和页脚 75
3.9.5计算小计 76
3.10从SQL*Plus获取帮助信息 78
3.11自动生成SQL语句 79
3.12断开资料库连线并退出SQL*Plus 79
3.13小结 79
第4章使用简单函式 81
4.1使用单行函式 82
4.1.1字元函式 82
4.1.2数值函式 91
4.1.3转换函式 96
4.1.4正则表达式函式 106
4.2使用聚合函式 112
4.3对行进行分组 116
4.3.1使用GROUPBY子句对行进行分组 116
4.3.2调用聚合函式的错误用法 119
4.3.3使用HAVING子句过滤行组 120
4.3.4组合使用WHERE和GROUPBY子句 120
4.4小结 122
第5章日期和时间的存储与处理 123
5.1几个简单的存储和检索日期的例子 123
5.2使用TO_CHAR()和TO_DATE()转换时间值 125
5.2.1使用TO_CHAR()将时间值转换为字元串 125
5.2.2使用TO_DATE()将字元串转换为时间值 130
5.3设定默认的日期格式 132
5.4Oracle对两位年份的处理 133
5.4.1使用YY格式 133
5.4.2使用RR格式 134
5.5使用时间值函式 135
5.6使用时区 140
5.6.1与时区有关的函式 140
5.6.2资料库时区和会话时区 141
5.6.3获取时区的时差 142
5.6.4获取时区名 142
5.6.5将时间值从一个时区转换为另一个时区 143
5.7使用时间戳 143
5.7.1使用时间戳类型 143
5.7.2与时间戳有关的函式 147
5.8使用时间间隔 152
5.8.3与时间间隔有关的函式 157
5.9小结 158
第6章子查询 159
6.1子查询的类型 159
6.2编写单行子查询 160
6.2.1在WHERE子句中使用子查询 160
6.2.2使用其他单行操作符 161
6.2.3在HAVING子句中使用子查询 161
6.2.4在FROM子句中使用子查询(内联视图) 162
6.2.5可能碰到的错误 163
6.3编写多行子查询 164
6.3.1在多行子查询中使用IN操作符 165
6.3.2在多行子查询中使用ANY操作符 165
6.3.3在多行子查询中使用ALL操作符 166
6.4编写多列子查询 166
6.5编写关联子查询 167
6.5.1关联子查询的例子 167
6.5.2在关联子查询中使用EXISTS和NOTEXISTS 168
6.6编写嵌套子查询 170
6.7编写包含子查询的UPDATE和DELETE语句 172
6.7.1编写包含子查询的UPDATE语句 172
6.7.2编写包含子查询的DELETE语句 172
6.8使用子查询因子化 173
6.9小结 174
第7章高级查询 175
7.1使用集合操作符 176
7.1.1示例表 176
7.1.2使用UNIONALL操作符 177
7.1.3使用UNION操作符 178
7.1.4使用INTERSECT操作符 179
7.1.5使用MINUS操作符 179
7.1.6组合使用集合操作符 180
7.2使用TRANSLATE()函式 182
7.3使用DECODE()函式 183
7.4使用CASE表达式 185
7.4.1使用简单CASE表达式 185
7.4.2使用搜寻CASE表达式 186
7.5层次化查询 187
7.5.1示例数据 187
7.5.2使用CONNECTBY和STARTWITH子句 189
7.5.3使用伪列LEVEL 190
7.5.4格式化层次化查询的结果 190
7.5.5从非根节点开始遍历191
7.5.6在STARTWITH子句中使用子查询 192
7.5.7从下向上遍历树 192
7.5.8从层次化查询中删除节点和分支 193
7.5.9在层次化查询中加入其他条件 194
7.5.10使用递归子查询因子化查询分层数据 194
7.6使用ROLLUP和CUBE子句 198
7.6.1示例表 199
7.6.2使用ROLLUP子句 200
7.6.3使用CUBE子句 203
7.6.4使用GROUPING()函式 204
7.6.5使用GROUPINGSETS子句 207
7.6.6使用GROUPING_ID()函式 207
7.6.7在GROUPBY子句中多次使用某个列 209
7.6.8使用GROUP_ID()函式 210
7.7使用CROSSAPPLY和OUTERAPPLY 211
7.7.1CROSSAPPLY 212
7.7.2OUTERAPPLY 212
7.8使用LATERAL 213
7.9小结 214
第8章分析数据 215
8.1使用分析函式 215
8.1.1示例表 216
8.1.2使用评级函式 217
8.1.3使用反百分位函式 223
8.1.4使用视窗函式 224
8.1.5使用报表函式 230
8.1.6使用LAG()和LEAD()函式 233
8.1.7使用FIRST和LAST函式 234
8.1.8使用线性回归函式 234
8.1.9使用假想评级与分布函式 235
8.2使用MODEL子句 236
8.2.1MODEL子句示例 236
8.2.2用位置标记和符号标记访问数据单元 238
8.2.3用BETWEEN和AND返回特定範围内的数据单元 239
8.2.4用ANY和ISANY访问所有的数据单元 239
8.2.5用CURRENTV()函式获取某个维度的当前值 239
8.2.6用FOR循环访问数据单元 240
8.2.7处理空值和缺失值 242
8.2.8更新已有的单元 244
8.3使用PIVOT和UNPIVOT子句 245
8.3.1PIVOT子句的简单示例 245
8.3.2转换多个列 246
8.3.3在转换中使用多个聚合函式 247
8.3.4使用UNPIVOT子句 248
8.4执行Top-N查询 249
8.4.1使用FETCHFIRST子句 250
8.4.2使用OFFSET子句 250
8.4.3使用PERCENT子句 251
8.4.4使用WITHTIES子句 252
8.5在数据中发现模式 252
8.5.1在all_sales2表中发现V形数据模式 253
8.5.2在all_sales3表中发现W型数据模式 256
8.5.3在all_sales3表中发现V形数据模式 257
8.6小结 258
第9章修改表的内容 259
9.1使用INSERT语句添加行 260
9.1.1省略列的列表 261
9.1.2为列指定空值 261
9.1.3在列值中使用单引号和双引号 261
9.1.4从一个表向另一个表複製行 262
9.2使用UPDATE语句修改行 262
9.3使用RETURNING子句返回聚合函式的计算结果 263
9.4使用DELETE语句删除行 264
9.5资料库的完整性 264
9.5.1主键约束 264
9.5.2外键约束 265
9.6使用默认值 266
9.7使用MERGE合併行 267
9.8资料库事务 269
9.8.1事务的提交和回滚 269
9.8.2事务的开始与结束 270
9.8.3保存点 271
9.8.4事务的ACID特性 272
9.8.5并发事务 273
9.8.6事务锁 274
9.8.7事务隔离级别 274
9.8.8SERIALIZABLE事务隔离级别的一个例子 275
9.9查询闪回 276
9.9.1授权使用闪回 276
9.9.2时间查询闪回 277
9.9.3SCN查询闪回 278
9.10小结 280
第10章用户、特权和角色 281
10.1用户 282
10.1.1创建用户 282
10.1.2修改用户密码 283
10.1.3删除用户 283
10.2系统特权 284
10.2.1向用户授予系统特权 284
10.2.2检查授予用户的系统特权 285
10.2.3使用系统特权 286
10.2.4撤消用户的系统特权 286
10.3对象特权 287
10.3.1向用户授予对象特权 287
10.3.2检查已授予的对象特权 288
10.3.3检查已接受的对象特权 289
10.3.4使用对象特权 291
10.3.5创建同义词 291
10.3.6创建公共同义词 292
10.3.7撤消用户的对象特权 293
10.4角色 293
10.4.1创建角色 293
10.4.2为角色授权 294
10.4.3将角色授予用户 294
10.4.4检查授予用户的角色 294
10.4.5检查授予角色的系统特权 296
10.4.6检查授予角色的对象特权 296
10.4.7使用已授予角色的特权 298
10.4.8启用和禁用角色 299
10.4.9撤消角色 300
10.4.10从角色中撤消特权 300
10.4.11删除角色 300
10.5审计 300
10.5.1执行审计需要的特权 300
10.5.2审计示例 301
10.5.3审计跟蹤视图 302
10.6小结 303
第11章创建表、序列、索引和视图 305
11.1表 305
11.1.1创建表 306
11.1.2获得有关表的信息 307
11.1.3获得表中列的信息 308
11.1.4修改表 308
11.1.5重命名表 317
11.1.6向表中添加注释 317
11.1.7截断表 318
11.1.8删除表 318
11.1.9使用BINARY_FLOAT和BINARY_DOUBLE数据类型 319
11.1.10使用DEFAULTONNULL列 320
11.1.11在表中使用可见及不可见列 321
11.2序列 323
11.2.1创建序列 324
11.2.2获取有关序列的信息 325
11.2.3使用序列 326
11.2.4使用序列填充主键 328
11.2.5使用序列指定默认列值 329
11.2.6使用标识列 329
11.2.7修改序列 330
11.2.8删除序列 330
11.3索引 331
11.3.1创建B-树索引 331
11.3.2创建基于函式的索引 332
11.3.3获取有关索引的信息 333
11.3.4获取列索引的信息 333
11.3.5修改索引 334
11.3.6删除索引 334
11.3.7创建点阵图索引 334
11.4视图 335
11.4.1创建并使用视图 336
11.4.2修改视图 343
11.4.3删除视图 343
11.4.4在视图中使用可见列和不可见列 343
11.5闪回数据归档 344
11.6小结 347
第12章PL/SQL编程简介 349
12.1块结构 350
12.2变数和类型 351
12.3条件逻辑 352
12.4循环 352
12.4.1简单循环 353
12.4.2WHILE循环 354
12.4.3FOR循环 354
12.5游标 355
12.5.1步骤(1):声明用于保存列值的变数 355
12.5.2步骤(2):声明游标 355
12.5.3步骤(3):打开游标 356
12.5.4步骤(4):从游标中取得行 356
12.5.5步骤(5):关闭游标 357
12.5.6完整的示例:product_cursor.sql 357
12.5.7游标与FOR循环 358
12.5.8OPEN-FOR语句 359
12.5.9无约束游标 361
12.6异常 362
12.6.1ZERO_DIVIDE异常 364
12.6.2DUP_VAL_ON_INDEX异常 365
12.6.3INVALID_NUMBER异常 365
12.6.4OTHERS异常 365
12.7过程 366
12.7.1创建过程 366
12.7.2调用过程 368
12.7.3获取有关过程的信息 369
12.7.4删除过程 370
12.7.5查看过程中的错误 370
12.8函式 371
12.8.1创建函式 371
12.8.2调用函式 372
12.8.3获取有关函式的信息 373
12.8.4删除函式 373
12.9包 373
12.9.1创建包的规範 373
12.9.2创建包体 374
12.9.3调用包中的函式和过程 375
12.9.4获取有关包中函式和过程的信息 376
12.9.5删除包 376
12.10触发器 377
12.10.1触发器启动的时机 377
12.10.2设定示例触发器 377
12.10.3创建触发器 377
12.10.4启动触发器 379
12.10.5获取有关触发器的信息 380
12.10.6禁用和启用触发器 382
12.10.7删除触发器 382
12.11其他PL/SQL特性 382
12.11.1SIMPLE_INTEGER类型 382
12.11.2在PL/SQL中使用序列 383
12.11.3PL/SQL本地机器代码生成 384
12.11.4WITH子句 385
12.12小结 386
第13章资料库对象 387
13.1对象简介 387
13.2创建对象类型 388
13.3使用DESCRIBE获取有关对象类型的信息 390
13.4在资料库表中使用对象类型 391
13.4.1列对象 391
13.4.2对象表 394
13.4.3对象标识符和对象引用 397
13.4.4比较对象值 399
13.6类型继承 410
13.6.1运行脚本以创建第2个对象模式 411
13.6.2继承属性 411
13.7用子类型对象代替超类型对象 413
13.7.1SQL例子 413
13.7.2PL/SQL示例 414
13.7.3NOTSUBSTITUTABLE对象 415
13.8其他有用的对象函式 416
13.8.1ISOF()函式 416
13.8.2TREAT()函式 419
13.8.3SYS_TYPEID()函式 423
13.9NOTINSTANTIABLE对象类型 424
13.10用户自定义的构造函式 425
13.11重载方法 429
13.12通用调用 430
13.12.1运行脚本以创建第3个对象模式 431
13.12.2继承属性 431
13.13小结 432
第14章集合 435
14.1集合简介 435
14.2创建集合类型 436
14.2.1创建变长数组类型 436
14.2.2创建嵌套表类型 437
14.3使用集合类型定义表列 437
14.3.1使用变长数组类型定义表列 437
14.3.2使用嵌套表类型定义表列 438
14.4 获取集合信息 438
14.4.1获取变长数组信息 438
14.4.2获得嵌套表信息 439
14.5填充集合元素 441
14.5.1填充变长数组元素 441
14.5.2填充嵌套表元素 441
14.6检索集合元素 442
14.6.1检索变长数组元素 442
14.6.2检索嵌套表元素 443
14.7使用TABLE()函式将集合视为一系列行 443
14.7.1将TABLE()函式套用于变长数组 444
14.7.2将TABLE()函式套用于嵌套表 445
14.8更改集合元素 445
14.8.1更改变长数组元素 445
14.8.2更改嵌套表元素 446
14.9使用映射方法比较嵌套表的内容 447
14.10使用CAST()函式将集合从一种类型转换为另一种类型 449
14.10.1使用CAST()函式将变长数组转换为嵌套表 449
14.10.2使用CAST()函式将嵌套錶转换为变长数组 450
14.11在PL/SQL中使用集合 451
14.11.1操作变长数组 451
14.11.2操作嵌套表 453
14.11.3PL/SQL集合方法 455
14.12创建和使用多级集合 464
14.12.1运行脚本创建第二个集合模式 464
14.12.2使用多级集合 464
14.13OracleDatabase10g对集合的增强 467
14.13.1运行脚本以创建第三个集合模式 467
14.13.2关联数组 467
14.13.3更改元素类型的大小 468
14.13.4增加变长数组中元素的数目 469
14.13.5在临时表中使用变长数组 469
14.13.6为嵌套表的存储表使用不同的表空间 469
14.13.7嵌套表对ANSI的支持 470
14.14小结 478
第15章大对象 479
15.1大对象(LOB)简介 480
15.2示例档案 480
15.3理解大对象类型 480
15.4创建包含大对象的表 481
15.5在SQL中使用大对象 483
15.5.1使用CLOB和BLOB对象 483
15.5.2使用BFILE对象 485
15.6在PL/SQL中使用大对象 486
15.6.1APPEND()方法 489
15.6.2CLOSE()方法 489
15.6.3COMPARE()方法 489
15.6.4COPY()方法 491
15.6.5CREATETEMPORARY()方法 492
15.6.6ERASE()方法 492
15.6.7FILECLOSE()方法 493
15.6.8FILECLOSEALL()方法 493
15.6.9FILEEXISTS()方法 494
15.6.10FILEGETNAME()方法 494
15.6.11FILEISOPEN()方法 495
15.6.12FILEOPEN()方法 495
15.6.13FREETEMPORARY()方法 496
15.6.14GETCHUNKSIZE()方法 496
15.6.15GETLENGTH()方法 497
15.6.16GET_STORAGE_LIMIT()方法 497
15.6.17INSTR()方法 498
15.6.18ISOPEN()方法 499
15.6.19ISTEMPORARY()方法 499
15.6.20LOADFROMFILE()方法 500
15.6.21LOADBLOBFROMFILE()方法 501
15.6.22LOADCLOBFROMFILE()方法 502
15.6.23OPEN()方法 503
15.6.24READ()方法 503
15.6.25SUBSTR()方法 504
15.6.26TRIM()方法 505
15.6.27WRITE()方法 506
15.6.28WRITEAPPEND()方法 507
15.6.29PL/SQL示例过程 507
15.7LONG和LONGRAW类型 524
15.7.1示例表 524
15.7.2向LONG和LONGRAW列添加数据 525
15.7.3将LONG和LONGRAW列转换为LOB 525
15.8OracleDatabase10g对大对象的增强 526
15.8.1CLOB和NCLOB对象之间的隐式转换 527
15.8.2在触发器中使用LOB时:new属性的用法 528
15.9OracleDatabase11g对大对象的增强 528
15.9.1加密LOB数据 528
15.9.2压缩LOB数据 532
15.9.3删除LOB重複数据 533
15.10OracleDatabase12c对大对象的增强 533
15.11小结 534
第16章SQL最佳化 535
16.1SQL最佳化简介 535
16.2使用WHERE子句过滤行 536
16.3使用表连线而不是多个查询 536
16.4执行连线时使用完全限定的列引用 537
16.5使用CASE表达式而不是多个查询 538
16.6添加表索引 539
16.6.1何时创建B-树索引 539
16.6.2何时创建点阵图索引 540
16.7使用WHERE而不是HAVING 540
16.8使用UNIONALL而不是UNION 541
16.9使用EXISTS而不是IN 542
16.10使用EXISTS而不是DISTINCT 543
16.11使用GROUPINGSETS而不是CUBE 543
16.12使用绑定变数 543
16.12.1不相同的SQL语句 544
16.12.2使用绑定变数定义相同的SQL语句 544
16.12.3列出和输出绑定变数 545
16.12.4使用绑定变数存储PL/SQL函式的返回值 545
16.12.5使用绑定变数存储来自REFCURSOR的返回值 546
16.13比较执行查询的成本 546
16.13.1检查执行计画 547
16.13.2比较执行计画 552
16.14为最佳化器传递提示 553
16.15其他最佳化工具 554
16.15.1OracleEnterpriseManager 555
16.15.2AutomaticDatabaseDiagnosticMonitor 555
16.16小结 556
第17章XML和Oracle资料库 557
17.1XML简介 557
17.2从关係数据生成XML 558
17.2.1XMLELEMENT()函式 558
17.2.2XMLATTRIBUTES()函式 561
17.2.3XMLFOREST()函式 562
17.2.4XMLAGG()函式 563
17.2.5XMLCOLATTVAL()函式 565
17.2.6XMLCONCAT()函式 566
17.2.7XMLPARSE()函式 566
17.2.8XMLPI()函式 567
17.2.9XMLCOMMENT()函式 567
17.2.10XMLSEQUENCE()函式 568
17.2.11XMLSERIALIZE()函式 569
17.2.12PL/SQL示例:将XML数据写入档案 569
17.2.13XMLQUERY()函式 571
17.3将XML保存到资料库中 575
17.3.1示例XML档案 575
17.3.2创建示例XML模式 576
17.3.3从示例XML模式检索信息 577
17.3.4更新示例XML模式中的信息 582
17.4小结 585
附录Oracle数据类型 587