Oracle PL/SQL攻略

Oracle PL/SQL攻略
作 者: Josh Juneau Matt Arena
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Oracle 计算机/网络 数据库
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Josh Juneau具有20多年的软件开发经验。他职业生涯的一开始就将数据库应用开发作为侧重点。成为Oracle数据库管理员后,Josh采用PL/SQL语言执行管理任务,为Oracle数据库开发应用。随着技能的提高,他开始尝试将Java加入到PL/SQL应用中,充分利用这两种技术的强大功能,开发健壮的Oracle数据库应用。此后,他又对Jython产生了浓厚的兴趣。Josh也是The Definitive Guide to Jython的首席作者,Django-Jython项目(http://code.google.com/p/django-jython/)负责人。Matt Arena 具有25年的Oracle数据库应用开发经验。自Web开发伊始,就一直致力于基于Web的应用开发。Matt负责过项目开发生命周期的各阶段工作,但他最喜欢数据库建模和编程。

内容简介

《图灵程序设计丛书·数据库系列:Oracle PL/SQL攻略》是PL/SQL各类症结的治病良方。全书共分为17章,分别介绍PL/SQL的不同方面,包括PL/SQL基础知识、SQL常见任务、触发器、异常处理、Oracle SQL Developer、分析并提高性能等。《图灵程序设计丛书·数据库系列:Oracle PL/SQL攻略》组织结构别具一格,通篇采用“问题—解决方案—原理分析”的形式。每节分别介绍一个实际案例,内容自成一体、相互独立、由浅入深。《图灵程序设计丛书·数据库系列:Oracle PL/SQL攻略》可引领新手走进PL/SQL世界,也可帮助专业人士在PL/SQL世界中所向披靡。

图书目录

目 录

第1章 PL/SQL基础 1

1.1 创建代码块 1

 问题 1

 解决方案 1

 原理分析 1

1.2 在SQL*Plus里执行代码块 2

 问题 2

 解决方案 2

 原理分析 2

1.3 把代码保存到脚本中 3

 问题 3

 解决方案 3

 原理分析 3

1.4 执行脚本 4

 问题 4

 解决方案 4

 原理分析 4

1.5 接受用户键盘输入 5

 问题 5

 解决方案 5

 原理分析 5

1.6 在SQL*Plus里显示结果 7

 问题 7

 解决方案 7

 原理分析 7

1.7 在代码中添加注释 8

 问题 8

 解决方案 8

 原理分析 8

1.8 引用代码块 9

 问题 9

 解决方案 9

 原理分析 9

1.9 从嵌套块中引用变量 10

 问题 10

 解决方案 10

 原理分析 11

1.10 忽略替换变量 11

 问题 11

 解决方案1 11

 解决方案2 11

 原理分析 12

1.11 改变替换变量字符 12

 问题 12

 解决方案 13

 原理分析 13

1.12 创建匹配数据库列类型的变量 13

 问题 13

 解决方案 13

 原理分析 14

第2章 基本的SQL操作 15

2.1 从数据库检索单行数据 15

 问题 15

 解决方案1 15

 解决方案2 16

 原理分析 17

2.2 限定列名与变量名 18

 问题 18

 解决方案 18

 原理分析 19

2.3 声明与列类型匹配的变量类型 19

 问题 19

 解决方案 19

 原理分析 20

2.4 把查询结果返回到PL/SQL记录中 20

 问题 20

 解决方案 20

 原理分析 21

2.5 创建自定义记录来接收查询结果 21

 问题 21

 解决方案 22

 原理分析 22

2.6 循环遍历查询的行结果 23

 问题 23

 解决方案1 23

 解决方案2 23

 原理分析 24

2.7 获取环境与会话信息 24

 问题 24

 解决方案 24

 原理分析 25

2.8 格式化查询结果 27

 问题 27

 解决方案 27

 原理分析 28

2.9 更新查询返回的结果行 28

 问题 28

 解决方案 28

 原理分析 29

2.10 更新游标返回的行结果 30

 问题 30

 解决方案 30

 原理分析 31

2.11 删除游标返回的行结果 31

 问题 31

 解决方案 31

 原理分析 32

2.12 执行事务 32

 问题 32

 解决方案 32

 原理分析 33

2.13 确保相同的数据对多个查询“可见” 34

 问题 34

 解决方案 34

 原理分析 34

2.14 从事务中执行另一个独立事务 35

 问题 35

 解决方案 35

 原理分析 36

2.15 找到并删除重复行数据 37

 问题 37

 解决方案 37

 原理分析 38

第3章 循环与逻辑 39

3.1 选择执行代码的时机 39

 问题 39

 解决方案 39

 原理分析 40

3.2 两个互斥条件中的抉择 40

 问题 40

 解决方案 40

 原理分析 41

3.3 多个互斥条件求值 41

 问题 41

 解决方案1 41

 解决方案2 42

 原理分析 43

3.4 一个有着多个输出结果的表达式 44

 问题 44

 解决方案 44

 原理分析 45

3.5 循环直至满足指定条件 45

 问题 45

 解决方案 45

 原理分析 46

3.6 遍历游标结果直到所有行结果都被返回 46

 问题 46

 解决方案 46

 原理分析 47

3.7 循环直到条件为FALSE 47

 问题 47

 解决方案 47

 原理分析 48

3.8 跳过当前循环迭代 48

 问题 48

 解决方案 48

 原理分析 49

3.9 迭代固定次数 50

 问题 50

 解决方案 50

 原理分析 50

3.10 逆向迭代 51

 问题 51

 解决方案 51

 原理分析 51

3.11 指定其他循环增量 52

 问题 52

 解决方案 52

 原理分析 52

3.12 使用奇数作为级数进行遍历 52

 问题 52

 解决方案 53

 原理分析 53

3.13 退出外层循环 53

 问题 53

 解决方案 53

 原理分析 54

3.14 跳转到代码中的指定位置 55

 问题 55

 解决方案 55

 原理分析 56

第4章 函数、过程与包 57

4.1 创建存储函数 57

 问题 57

 解决方案 57

 原理分析 58

4.2 从查询中执行存储函数 60

 问题 60

 解决方案 61

 原理分析 61

4.3 优化对于某一输入总是返回相同结果的函数 62

 问题 62

 解决方案 62

 原理分析 62

4.4 创建存储过程 63

 问题 63

 解决方案 63

 原理分析 64

4.5 执行存储过程 64

 问题 64

 解决方案 65

 原理分析 65

4.6 在过程或代码块中创建函数 66

 问题 66

 解决方案 66

 原理分析 67

4.7 按名称传递参数 67

 问题 67

 解决方案 67

 原理分析 67

4.8 设置默认参数值 68

 问题 68

 解决方案 68

 原理分析 68

4.9 组织相关程序形成一个独立单元 69

 问题 69

 解决方案 69

 原理分析 70

4.10 为包编写初始化代码 71

 问题 71

 解决方案 71

 原理分析 72

4.11 授予存储程序的创建与执行权限 73

 问题 73

 解决方案 73

 原理分析 73

4.12 执行包中的过程和函数 73

 问题 73

 解决方案 73

 原理分析 74

4.13 为存储程序创建公有名称 74

 问题 74

 解决方案 74

 原理分析 75

4.14 依次执行包程序 75

 问题 75

 解决方案 75

 原理分析 76

4.15 使用失败标志 77

 问题 77

 解决方案 77

 原理分析 78

4.16 将数据访问限制在包内 79

 问题 79

 解决方案 79

 原理分析 79

4.17 在你的权限集合下运行存储代码 80

 问题 80

 解决方案 80

 原理分析 80

4.18 在一个函数中接受多个参数集合 81

 问题 81

 解决方案 81

 原理分析 81

4.19 列举模式中的函数、过程和包 82

 问题 82

 解决方案 82

 原理分析 82

4.20 查看存储程序源代码 82

 问题 82

 解决方案 82

 原理分析 83

第5章 触发器 85

5.1 自动生成列值 85

 问题 85

 解决方案 85

 原理分析 86

5.2 保持关系数据同步 87

 问题 87

 解决方案 87

 原理分析 88

5.3 响应表的特定列更新 89

 问题 89

 解决方案 89

 原理分析 89

5.4 可更新的视图 90

 问题 90

 解决方案 90

 原理分析 92

5.5 改变应用程序的功能 92

 问题 92

 解决方案 93

 原理分析 93

5.6 验证输入数据 94

 问题 94

 解决方案 95

 原理分析 95

5.7 修正输入数据 95

 问题 95

 解决方案 95

 原理分析 96

5.8 替换列值 96

 问题 96

 解决方案 96

 原理分析 97

5.9 基于系统事件的触发器 98

 问题 98

 解决方案 98

 原理分析 99

5.10 与模式事件相关的触发器 100

 问题 100

 解决方案 100

 原理分析 101

5.11 同一事件激活两个触发器 102

 问题 102

 解决方案 102

 原理分析 103

5.12 创建响应多个事件的触发器 103

 问题 103

 解决方案 103

 原理分析 105

5.13 创建禁用状态的触发器106

 问题 106

 解决方案 106

 原理分析 107

第6章 类型转换 108

6.1 把字符串转换成数字 108

 问题 108

 解决方案 108

 原理分析 109

6.2 把字符串转换成日期 109

 问题 109

 解决方案 109

 原理分析 110

6.3 把数字转换成字符串 111

 问题 111

 解决方案 111

 原理分析 111

6.4 把日期转换成字符串 112

 问题 112

 解决方案 112

 原理分析 113

6.5 把字符串转换成时间戳 115

 问题 115

 解决方案 115

 原理分析 116

6.6 利用ANSI兼容的方式进行格式转换 116

 问题 116

 解决方案 116

 原理分析 117

6.7 PLS_INTEGER与NUMBER之间的隐式转换 118

 问题 118

 解决方案 118

 原理分析 119

第7章 数字、字符串和日期 120

7.1 字符串拼接 120

 问题 120

 解决方案 120

 原理分析 121

7.2 为日期增加天数 121

 问题 121

 解决方案 121

 原理分析 121

7.3 为日期增加月数 122

 问题 122

 解决方案 122

 原理分析 123

7.4 为日期增加年数 123

 问题 123

 解决方案 123

 原理分析 124

7.5 获取两个日期之间的间隔天数 125

 问题 125

 解决方案 125

 原理分析 125

7.6 为日期增加小时数、分钟数、秒数或天数 126

 问题 126

 解决方案 126

 原理分析 127

7.7 返回指定月份的第一天 129

 问题 129

 解决方案 129

 原理分析 129

7.8 返回月份的最后一天 130

 问题 130

 解决方案 130

 原理分析 130

7.9 数字的四舍五入 130

 问题 130

 解决方案 130

 原理分析 131

7.10 对日期时间值进行四舍五入 131

 问题 131

 解决方案 131

 原理分析 131

7.11 以毫秒单位来跟踪时间 132

 问题 132

 解决方案 132

 原理分析 133

7.12 把时区与日期和时间关联 133

 问题 133

 解决方案 133

 原理分析 133

7.13 利用样式在字符串中搜索 134

 问题 134

 解决方案 134

 原理分析 134

7.14 确定指定样式在字符串中的位置 135

 问题 135

 解决方案 135

 原理分析 136

7.15 字符串的查找与替换 137

 问题 137

 解决方案 137

 原理分析 138

第8章 动态SQL 139

8.1 执行编译时无法确定的单行查询 139

 问题 139

 解决方案1 139

 解决方案2 140

 原理分析1 141

 原理分析2 142

8.2 执行编译时无法确定的多行查询 142

 问题 142

 解决方案1 143

 解决方案2 143

 原理分析 144

8.3 编写动态INSERT语句 145

 问题 145

 解决方案1 145

 解决方案2 146

 原理分析 147

8.4 编写动态更新语句 148

 问题 148

 解决方案 148

 原理分析 151

8.5 编写动态删除语句 151

 问题 151

 解决方案 151

 原理分析 152

8.6 把动态查询结果数据放入记录中 153

 问题 153

 解决方案 153

 原理分析 154

8.7 执行动态PL/SQL块 154

 问题 154

 解决方案1 154

 解决方案2 155

 原理分析 155

8.8 运行时创建表 156

 问题 156

 解决方案 156

 原理分析 156

8.9 运行时修改表 157

 问题 157

 解决方案 157

 原理分析 157

8.10 查找出包含特殊字段值的所有表 158

 问题 158

 解决方案 158

 原理分析 160

8.11 在大对象中保存动态SQL 161

 问题 161

 解决方案1 161

 解决方案2 162

 原理分析 162

8.12 向动态SQL传递NULL值 163

 问题 163

 解决方案 163

 原理分析 164

8.13 在DMBS_SQL与原生动态SQL间切换 164

 问题 164

 解决方案 164

 原理分析 166

8.14 防止SQL注入攻击166

 问题 166

 解决方案 166

 原理分析 167

第9章 异常 169

9.1 捕获异常 169

 问题 169

 解决方案 169

 原理分析 171

9.2 捕获未知异常 173

 问题 173

 解决方案 173

 原理分析 175

9.3 创建并抛出命名的自定义异常 175

 问题 175

 解决方案 175

 原理分析 177

9.4 判断OTHERS处理程序中发生了哪个错误 177

 问题 177

 解决方案 177

 原理分析 179

9.5 抛出用户定义异常 180

 问题 180

 解决方案 181

 原理分析 181

9.6 在异常抛出后重定向控制权 182

 问题 182

 解决方案 183

 原理分析 184

9.7 抛出异常并继续处理 184

 问题 184

 解决方案 184

 原理分析 185

9.8 将无名异常与错误号关联 185

 问题 185

 解决方案 186

 原理分析 186

9.9 追踪异常源 187

 问题 187

 解决方案 187

 原理分析 189

9.10 显示PL/SQL编译器警告 190

 问题 190

 解决方案 190

 原理分析 191

第10章 PL/SQL集合与记录 193

10.1 创建并访问VARRAY 193

 问题 193

 解决方案 193

 原理分析 194

10.2 创建并访问索引表 194

 问题 194

 解决方案 194

 原理分析 195

10.3 创建简单的记录 195

 问题 195

 解决方案 195

 原理分析 195

10.4 创建并访问记录集合 196

 问题 196

 解决方案 196

 原理分析 196

10.5 创建并访问哈希数组集合 197

 问题 197

 解决方案 197

 原理分析 198

10.6 创建并访问复杂的集合 198

 问题 198

 解决方案 198

 原理分析 200

10.7 将集合作为调用参数使用 201

 问题 201

 解决方案 201

 原理分析 202

10.8 将集合作为返回参数使用 202

 问题 202

 解决方案 202

 原理分析 203

10.9 计算集合元素个数 203

 问题 203

 解决方案 204

 原理分析 204

10.10 从集合中删除记录 204

 问题 204

 解决方案 205

 原理分析 205

10.11 检查集合中是否存在指定的元素 206

 问题 206

 解决方案 206

 原理分析 207

10.12 增加集合大小 207

 问题 207

 解决方案 207

 原理分析 208

10.13 集合导航 208

 问题 208

 解决方案 208

 原理分析 209

10.14 对集合进行修剪 209

 问题 209

 解决方案 209

 原理分析 210

第11章 自动化日常任务 211

11.1 调度重复性作业 211

 问题 211

 解决方案 211

 原理分析 211

11.2 用电子邮件发送调度作业的输出 212

 问题 212

 解决方案 212

 原理分析 213

11.3 用电子邮件发送作业状态通知 213

 问题 213

 解决方案 213

 原理分析 213

11.4 按固定时间间隔刷新物化视图 214

 问题 214

 解决方案 214

 原理分析 216

11.5 与远程数据源保持数据同步 216

 问题 216

 解决方案 217

 原理分析 218

11.6 计划作业链 218

 问题 218

 解决方案 218

 原理分析 221

第12章 Oracle SQL Developer 223

12.1 创建标准的授权数据库连接 223

 问题 223

 解决方案 223

 原理分析 224

12.2 获取表的信息 225

 问题 225

 解决方案 225

 原理分析 226

12.3 启用显示输出功能 227

 问题 227

 解决方案 227

 原理分析 227

12.4 编写并执行PL/SQL 228

 问题 228

 解决方案 228

 原理分析 229

12.5 创建并执行脚本 231

 问题 231

 解决方案 231

 原理分析 232

12.6 将用户的输入值当作替代变量 233

 问题 233

 解决方案 233

 原理分析 233

12.7 保存可以快速访问的代码片段 234

 问题 234

 解决方案 234

 原理分析 234

12.8 创建函数 236

 问题 236

 解决方案 236

 原理分析 237

12.9 创建存储过程 239

 问题 239

 解决方案 239

 原理分析 240

12.10 创建包说明和包体 243

 问题 243

 解决方案 243

 原理分析 243

12.11 创建触发器 247

 问题 247

 解决方案 247

 原理分析 247

12.12 调试存储代码 250

 问题 250

 解决方案 250

 原理分析 250

12.13 在导航器中编译代码 252

 问题 252

 解决方案 253

 原理分析 253

第13章 性能分析与改进 254

13.1 安装DBMS_PROFILER 254

 问题 254

 解决方案 254

 原理分析 255

13.2 找出瓶颈 255

 问题 255

 解决方案 255

 原理分析 256

13.3 加速读写循环 257

 问题 257

 解决方案 257

 原理分析 258

13.4 将较大集合或复杂集合作为OUT参数使用 259

 问题 259

 解决方案 259

 原理分析 260

13.5 优化计算密集型代码 260

 问题 260

 解决方案 261

 原理分析 261

13.6 改善运行时的初始化时间 262

 问题 262

 解决方案 262

 原理分析 262

第14章 在Web中使用PL/SQL 263

14.1 在Web上运行PL/SQL过程 263

 问题 263

 解决方案 263

 原理分析 264

14.2 创建生成HTML页面的公用过程集合 265

 问题 265

 解决方案 265

 原理分析 266

14.3 创建输入表单 267

 问题 267

 解决方案 267

 原理分析 268

14.4 用PL/SQL创建基于Web的报表 270

 问题 270

 解决方案 270

 原理分析 272

14.5 显示表中的数据 273

 问题 273

 解决方案 273

 原理分析 274

14.6 通过数据库查询创建Web表单下拉列表 274

 问题 274

 解决方案 274

 原理分析 275

14.7 创建可排序Web报表 276

 问题 276

 解决方案 276

 原理分析 278

14.8 在Web页面之间传递数据 279

 问题 279

 解决方案 279

 原理分析 280

14.9 查看调试Web程序时发生的错误信息 280

 问题 280

 解决方案 281

 原理分析 281

14.10 用PL/SQL生成JavaScript 282

 问题 282

 解决方案 282

 原理分析 283

14.11 生成XML数据 284

 问题 284

 解决方案 284

 原理分析 285

14.12 用Ajax创建一个输入表单 286

 问题 286

 解决方案 286

 原理分析 287

第15章 数据库中的Java应用 289

15.1 创建Java数据库类 289

 问题 289

 解决方案 289

 原理分析 290

15.2 把Java类装载到数据库中 291

 问题 291

 原理分析 293

15.3 把编译后的Java类装载到数据库中 293

 问题 293

 解决方案 293

 原理分析 294

15.4 把Java类声明为存储过程 294

 问题 294

 解决方案 295

 原理分析 295

15.5 执行Java存储过程 295

 问题 295

 解决方案 295

 原理分析 296

15.6 从PL/SQL代码中调用Java存储过程 296

 问题 296

 解决方案 296

 原理分析 297

15.7 在PL/SQL与Java之间传递参数 298

 问题 298

 解决方案 298

 原理分析 299

15.8 创建与调用Java数据库函数 300

 问题 300

 解决方案 300

 原理分析 301

15.9 创建Java数据库触发器 301

 问题 301

 解决方案 301

 原理分析 303

15.10 从PL/SQL往Java中传递数据对象 303

 问题 303

 解决方案 303

 原理分析 305

15.11 把Java类嵌入PL/SQL包 306

 问题 306

 解决方案 306

 原理分析 307

15.12 向数据库中装载Java类库 307

 问题 307

 解决方案 307

 原理分析 309

15.13 删除Java类 309

 问题 309

 解决方案 310

 原理分析 310

15.14 用Java检索数据库元数据 310

 问题 310

 解决方案 310

 原理分析 311

15.15 查询数据库以解决Java编译问题 311

 问题 311

 解决方案 311

 原理分析 312

第16章 从JDBC、HTTP、Groovy和Jython中访问PL/SQL 313

16.1 通过JDBC访问PL/SQL存储过程 313

 问题 313

 解决方案 313

 原理分析 315

16.2 从JDBC中访问PL/SQL存储函数 316

 问题 316

 解决方案 316

 原理分析 317

16.3 通过HTTP访问PL/SQL过程 318

 问题 318

 解决方案 318

 原理分析 321

16.4 从Jython中访问PL/SQL 322

 问题 322

 原理分析 324

16.5 从Groovy访问PL/SQL 325

 问题 325

 解决方案 325

 原理分析 325

第17章 用utPLSQL进行单元测试 327

17.1 使用单元测试来测试PL/SQL代码 327

 问题 327

 解决方案 327

 原理分析 329

17.2 安装utPLSQL单元测试框架 329

 问题 329

 解决方案 329

 原理分析 330

17.3 构建utPLSQL测试包 331

 问题 331

 解决方案 331

 原理分析 332

17.4 编写utPLSQL单元测试过程 332

 问题 332

 解决方案 333

 原理分析 334

17.5 运行utPLSQL测试 335

 问题 335

 解决方案 335

 原理分析 338

17.6 构建utPLSQL测试套件 338

 问题 338

 解决方案 338

 原理分析 338

17.7 运行utPLSQL测试套件 339

 问题 339

 解决方案 339

 原理分析 345

17.8 重新配置utPLSQL参数 345

 问题 345

 解决方案 346

 原理分析 346

17.9 将utPLSQL测试结果重定向到文件 348

 问题 348

 解决方案 348

 原理分析 348

17.10 用Ant自动运行PL/SQL和Java存储过程的单元测试 349

 问题 349

 解决方案 350

 原理分析 351

索引 355