出版时间:2013-6 出版社:人民邮电出版社 作者:[美] Josh Juneau,[美]Matt Arena 译者:任政委
Tag标签:无
内容概要
PL/SQL是Oracle数据库对SQL语言的扩展,它开启了数据库中业务逻辑集中化的大门。借助于PL/SQL,Oracle的很多最新特性都得以崭露头角。PL/SQL也是非常成功的Oracle Application Express的基石。本书两位作者都具有20多年的数据库应用开发经验,对使用PL/SQL操作Oracle数据库的各种问题了如指掌。在本书中,作者将多年的实战经验总结为具体案例,通过“问题—原理分析—解决方案”的形式,介绍相关问题的破解方法。本书组织结构别具一格,内容由浅入深,读者只需浏览目录,从中找到你所面临的难题,对相关代码略作修改,难题便可迎刃而解。
本书可引领新手走进PL/SQL世界,也可以帮助专业人士在PL/SQL世界中所向披靡。
作者简介
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负责过项目开发生命周期的各阶段工作,但他最喜欢数据库建模和编程。
书籍目录
目 录第1章 PL/SQL基础 11.1 创建代码块 1 问题 1 解决方案 1 原理分析 11.2 在SQL*Plus里执行代码块 2 问题 2 解决方案 2 原理分析 21.3 把代码保存到脚本中 3 问题 3 解决方案 3 原理分析 31.4 执行脚本 4 问题 4 解决方案 4 原理分析 41.5 接受用户键盘输入 5 问题 5 解决方案 5 原理分析 51.6 在SQL*Plus里显示结果 7 问题 7 解决方案 7 原理分析 71.7 在代码中添加注释 8 问题 8 解决方案 8 原理分析 81.8 引用代码块 9 问题 9 解决方案 9 原理分析 91.9 从嵌套块中引用变量 10 问题 10 解决方案 10 原理分析 111.10 忽略替换变量 11 问题 11 解决方案1 11 解决方案2 11 原理分析 121.11 改变替换变量字符 12 问题 12 解决方案 13 原理分析 131.12 创建匹配数据库列类型的变量 13 问题 13 解决方案 13 原理分析 14第2章 基本的SQL操作 152.1 从数据库检索单行数据 15 问题 15 解决方案1 15 解决方案2 16 原理分析 172.2 限定列名与变量名 18 问题 18 解决方案 18 原理分析 192.3 声明与列类型匹配的变量类型 19 问题 19 解决方案 19 原理分析 202.4 把查询结果返回到PL/SQL记录中 20 问题 20 解决方案 20 原理分析 212.5 创建自定义记录来接收查询结果 21 问题 21 解决方案 22 原理分析 222.6 循环遍历查询的行结果 23 问题 23 解决方案1 23 解决方案2 23 原理分析 242.7 获取环境与会话信息 24 问题 24 解决方案 24 原理分析 252.8 格式化查询结果 27 问题 27 解决方案 27 原理分析 282.9 更新查询返回的结果行 28 问题 28 解决方案 28 原理分析 292.10 更新游标返回的行结果 30 问题 30 解决方案 30 原理分析 312.11 删除游标返回的行结果 31 问题 31 解决方案 31 原理分析 322.12 执行事务 32 问题 32 解决方案 32 原理分析 332.13 确保相同的数据对多个查询“可见” 34 问题 34 解决方案 34 原理分析 342.14 从事务中执行另一个独立事务 35 问题 35 解决方案 35 原理分析 362.15 找到并删除重复行数据 37 问题 37 解决方案 37 原理分析 38第3章 循环与逻辑 393.1 选择执行代码的时机 39 问题 39 解决方案 39 原理分析 403.2 两个互斥条件中的抉择 40 问题 40 解决方案 40 原理分析 413.3 多个互斥条件求值 41 问题 41 解决方案1 41 解决方案2 42 原理分析 433.4 一个有着多个输出结果的表达式 44 问题 44 解决方案 44 原理分析 453.5 循环直至满足指定条件 45 问题 45 解决方案 45 原理分析 463.6 遍历游标结果直到所有行结果都被返回 46 问题 46 解决方案 46 原理分析 473.7 循环直到条件为FALSE 47 问题 47 解决方案 47 原理分析 483.8 跳过当前循环迭代 48 问题 48 解决方案 48 原理分析 493.9 迭代固定次数 50 问题 50 解决方案 50 原理分析 503.10 逆向迭代 51 问题 51 解决方案 51 原理分析 513.11 指定其他循环增量 52 问题 52 解决方案 52 原理分析 523.12 使用奇数作为级数进行遍历 52 问题 52 解决方案 53 原理分析 533.13 退出外层循环 53 问题 53 解决方案 53 原理分析 543.14 跳转到代码中的指定位置 55 问题 55 解决方案 55 原理分析 56第4章 函数、过程与包 574.1 创建存储函数 57 问题 57 解决方案 57 原理分析 584.2 从查询中执行存储函数 60 问题 60 解决方案 61 原理分析 614.3 优化对于某一输入总是返回相同结果的函数 62 问题 62 解决方案 62 原理分析 624.4 创建存储过程 63 问题 63 解决方案 63 原理分析 644.5 执行存储过程 64 问题 64 解决方案 65 原理分析 654.6 在过程或代码块中创建函数 66 问题 66 解决方案 66 原理分析 674.7 按名称传递参数 67 问题 67 解决方案 67 原理分析 674.8 设置默认参数值 68 问题 68 解决方案 68 原理分析 684.9 组织相关程序形成一个独立单元 69 问题 69 解决方案 69 原理分析 704.10 为包编写初始化代码 71 问题 71 解决方案 71 原理分析 724.11 授予存储程序的创建与执行权限 73 问题 73 解决方案 73 原理分析 734.12 执行包中的过程和函数 73 问题 73 解决方案 73 原理分析 744.13 为存储程序创建公有名称 74 问题 74 解决方案 74 原理分析 754.14 依次执行包程序 75 问题 75 解决方案 75 原理分析 764.15 使用失败标志 77 问题 77 解决方案 77 原理分析 784.16 将数据访问限制在包内 79 问题 79 解决方案 79 原理分析 794.17 在你的权限集合下运行存储代码 80 问题 80 解决方案 80 原理分析 804.18 在一个函数中接受多个参数集合 81 问题 81 解决方案 81 原理分析 814.19 列举模式中的函数、过程和包 82 问题 82 解决方案 82 原理分析 824.20 查看存储程序源代码 82 问题 82 解决方案 82 原理分析 83第5章 触发器 855.1 自动生成列值 85 问题 85 解决方案 85 原理分析 865.2 保持关系数据同步 87 问题 87 解决方案 87 原理分析 885.3 响应表的特定列更新 89 问题 89 解决方案 89 原理分析 895.4 可更新的视图 90 问题 90 解决方案 90 原理分析 925.5 改变应用程序的功能 92 问题 92 解决方案 93 原理分析 935.6 验证输入数据 94 问题 94 解决方案 95 原理分析 955.7 修正输入数据 95 问题 95 解决方案 95 原理分析 965.8 替换列值 96 问题 96 解决方案 96 原理分析 975.9 基于系统事件的触发器 98 问题 98 解决方案 98 原理分析 995.10 与模式事件相关的触发器 100 问题 100 解决方案 100 原理分析 1015.11 同一事件激活两个触发器 102 问题 102 解决方案 102 原理分析 1035.12 创建响应多个事件的触发器 103 问题 103 解决方案 103 原理分析 1055.13 创建禁用状态的触发器106 问题 106 解决方案 106 原理分析 107第6章 类型转换 1086.1 把字符串转换成数字 108 问题 108 解决方案 108 原理分析 1096.2 把字符串转换成日期 109 问题 109 解决方案 109 原理分析 1106.3 把数字转换成字符串 111 问题 111 解决方案 111 原理分析 1116.4 把日期转换成字符串 112 问题 112 解决方案 112 原理分析 1136.5 把字符串转换成时间戳 115 问题 115 解决方案 115 原理分析 1166.6 利用ANSI兼容的方式进行格式转换 116 问题 116 解决方案 116 原理分析 1176.7 PLS_INTEGER与NUMBER之间的隐式转换 118 问题 118 解决方案 118 原理分析 119第7章 数字、字符串和日期 1207.1 字符串拼接 120 问题 120 解决方案 120 原理分析 1217.2 为日期增加天数 121 问题 121 解决方案 121 原理分析 1217.3 为日期增加月数 122 问题 122 解决方案 122 原理分析 1237.4 为日期增加年数 123 问题 123 解决方案 123 原理分析 1247.5 获取两个日期之间的间隔天数 125 问题 125 解决方案 125 原理分析 1257.6 为日期增加小时数、分钟数、秒数或天数 126 问题 126 解决方案 126 原理分析 1277.7 返回指定月份的第一天 129 问题 129 解决方案 129 原理分析 1297.8 返回月份的最后一天 130 问题 130 解决方案 130 原理分析 1307.9 数字的四舍五入 130 问题 130 解决方案 130 原理分析 1317.10 对日期时间值进行四舍五入 131 问题 131 解决方案 131 原理分析 1317.11 以毫秒单位来跟踪时间 132 问题 132 解决方案 132 原理分析 1337.12 把时区与日期和时间关联 133 问题 133 解决方案 133 原理分析 1337.13 利用样式在字符串中搜索 134 问题 134 解决方案 134 原理分析 1347.14 确定指定样式在字符串中的位置 135 问题 135 解决方案 135 原理分析 1367.15 字符串的查找与替换 137 问题 137 解决方案 137 原理分析 138第8章 动态SQL 1398.1 执行编译时无法确定的单行查询 139 问题 139 解决方案1 139 解决方案2 140 原理分析1 141 原理分析2 1428.2 执行编译时无法确定的多行查询 142 问题 142 解决方案1 143 解决方案2 143 原理分析 1448.3 编写动态INSERT语句 145 问题 145 解决方案1 145 解决方案2 146 原理分析 1478.4 编写动态更新语句 148 问题 148 解决方案 148 原理分析 1518.5 编写动态删除语句 151 问题 151 解决方案 151 原理分析 1528.6 把动态查询结果数据放入记录中 153 问题 153 解决方案 153 原理分析 1548.7 执行动态PL/SQL块 154 问题 154 解决方案1 154 解决方案2 155 原理分析 1558.8 运行时创建表 156 问题 156 解决方案 156 原理分析 1568.9 运行时修改表 157 问题 157 解决方案 157 原理分析 1578.10 查找出包含特殊字段值的所有表 158 问题 158 解决方案 158 原理分析 1608.11 在大对象中保存动态SQL 161 问题 161 解决方案1 161 解决方案2 162 原理分析 1628.12 向动态SQL传递NULL值 163 问题 163 解决方案 163 原理分析 1648.13 在DMBS_SQL与原生动态SQL间切换 164 问题 164 解决方案 164 原理分析 1668.14 防止SQL注入攻击166 问题 166 解决方案 166 原理分析 167第9章 异常 1699.1 捕获异常 169 问题 169 解决方案 169 原理分析 1719.2 捕获未知异常 173 问题 173 解决方案 173 原理分析 1759.3 创建并抛出命名的自定义异常 175 问题 175 解决方案 175 原理分析 1779.4 判断OTHERS处理程序中发生了哪个错误 177 问题 177 解决方案 177 原理分析 1799.5 抛出用户定义异常 180 问题 180 解决方案 181 原理分析 1819.6 在异常抛出后重定向控制权 182 问题 182 解决方案 183 原理分析 1849.7 抛出异常并继续处理 184 问题 184 解决方案 184 原理分析 1859.8 将无名异常与错误号关联 185 问题 185 解决方案 186 原理分析 1869.9 追踪异常源 187 问题 187 解决方案 187 原理分析 1899.10 显示PL/SQL编译器警告 190 问题 190 解决方案 190 原理分析 191第10章 PL/SQL集合与记录 19310.1 创建并访问VARRAY 193 问题 193 解决方案 193 原理分析 19410.2 创建并访问索引表 194 问题 194 解决方案 194 原理分析 19510.3 创建简单的记录 195 问题 195 解决方案 195 原理分析 19510.4 创建并访问记录集合 196 问题 196 解决方案 196 原理分析 19610.5 创建并访问哈希数组集合 197 问题 197 解决方案 197 原理分析 19810.6 创建并访问复杂的集合 198 问题 198 解决方案 198 原理分析 20010.7 将集合作为调用参数使用 201 问题 201 解决方案 201 原理分析 20210.8 将集合作为返回参数使用 202 问题 202 解决方案 202 原理分析 20310.9 计算集合元素个数 203 问题 203 解决方案 204 原理分析 20410.10 从集合中删除记录 204 问题 204 解决方案 205 原理分析 20510.11 检查集合中是否存在指定的元素 206 问题 206 解决方案 206 原理分析 20710.12 增加集合大小 207 问题 207 解决方案 207 原理分析 20810.13 集合导航 208 问题 208 解决方案 208 原理分析 20910.14 对集合进行修剪 209 问题 209 解决方案 209 原理分析 210第11章 自动化日常任务 21111.1 调度重复性作业 211 问题 211 解决方案 211 原理分析 21111.2 用电子邮件发送调度作业的输出 212 问题 212 解决方案 212 原理分析 21311.3 用电子邮件发送作业状态通知 213 问题 213 解决方案 213 原理分析 21311.4 按固定时间间隔刷新物化视图 214 问题 214 解决方案 214 原理分析 21611.5 与远程数据源保持数据同步 216 问题 216 解决方案 217 原理分析 21811.6 计划作业链 218 问题 218 解决方案 218 原理分析 221第12章 Oracle SQL Developer 22312.1 创建标准的授权数据库连接 223 问题 223 解决方案 223 原理分析 22412.2 获取表的信息 225 问题 225 解决方案 225 原理分析 22612.3 启用显示输出功能 227 问题 227 解决方案 227 原理分析 22712.4 编写并执行PL/SQL 228 问题 228 解决方案 228 原理分析 22912.5 创建并执行脚本 231 问题 231 解决方案 231 原理分析 23212.6 将用户的输入值当作替代变量 233 问题 233 解决方案 233 原理分析 23312.7 保存可以快速访问的代码片段 234 问题 234 解决方案 234 原理分析 23412.8 创建函数 236 问题 236 解决方案 236 原理分析 23712.9 创建存储过程 239 问题 239 解决方案 239 原理分析 24012.10 创建包说明和包体 243 问题 243 解决方案 243 原理分析 24312.11 创建触发器 247 问题 247 解决方案 247 原理分析 24712.12 调试存储代码 250 问题 250 解决方案 250 原理分析 25012.13 在导航器中编译代码 252 问题 252 解决方案 253 原理分析 253第13章 性能分析与改进 25413.1 安装DBMS_PROFILER 254 问题 254 解决方案 254 原理分析 25513.2 找出瓶颈 255 问题 255 解决方案 255 原理分析 25613.3 加速读写循环 257 问题 257 解决方案 257 原理分析 25813.4 将较大集合或复杂集合作为OUT参数使用 259 问题 259 解决方案 259 原理分析 26013.5 优化计算密集型代码 260 问题 260 解决方案 261 原理分析 26113.6 改善运行时的初始化时间 262 问题 262 解决方案 262 原理分析 262第14章 在Web中使用PL/SQL 26314.1 在Web上运行PL/SQL过程 263 问题 263 解决方案 263 原理分析 26414.2 创建生成HTML页面的公用过程集合 265 问题 265 解决方案 265 原理分析 26614.3 创建输入表单 267 问题 267 解决方案 267 原理分析 26814.4 用PL/SQL创建基于Web的报表 270 问题 270 解决方案 270 原理分析 27214.5 显示表中的数据 273 问题 273 解决方案 273 原理分析 27414.6 通过数据库查询创建Web表单下拉列表 274 问题 274 解决方案 274 原理分析 27514.7 创建可排序Web报表 276 问题 276 解决方案 276 原理分析 27814.8 在Web页面之间传递数据 279 问题 279 解决方案 279 原理分析 28014.9 查看调试Web程序时发生的错误信息 280 问题 280 解决方案 281 原理分析 28114.10 用PL/SQL生成JavaScript 282 问题 282 解决方案 282 原理分析 28314.11 生成XML数据 284 问题 284 解决方案 284 原理分析 28514.12 用Ajax创建一个输入表单 286 问题 286 解决方案 286 原理分析 287第15章 数据库中的Java应用 28915.1 创建Java数据库类 289 问题 289 解决方案 289 原理分析 29015.2 把Java类装载到数据库中 291 问题 291 原理分析 29315.3 把编译后的Java类装载到数据库中 293 问题 293 解决方案 293 原理分析 29415.4 把Java类声明为存储过程 294 问题 294 解决方案 295 原理分析 29515.5 执行Java存储过程 295 问题 295 解决方案 295 原理分析 29615.6 从PL/SQL代码中调用Java存储过程 296 问题 296 解决方案 296 原理分析 29715.7 在PL/SQL与Java之间传递参数 298 问题 298 解决方案 298 原理分析 29915.8 创建与调用Java数据库函数 300 问题 300 解决方案 300 原理分析 30115.9 创建Java数据库触发器 301 问题 301 解决方案 301 原理分析 30315.10 从PL/SQL往Java中传递数据对象 303 问题 303 解决方案 303 原理分析 30515.11 把Java类嵌入PL/SQL包 306 问题 306 解决方案 306 原理分析 30715.12 向数据库中装载Java类库 307 问题 307 解决方案 307 原理分析 30915.13 删除Java类 309 问题 309 解决方案 310 原理分析 31015.14 用Java检索数据库元数据 310 问题 310 解决方案 310 原理分析 31115.15 查询数据库以解决Java编译问题 311 问题 311 解决方案 311 原理分析 312第16章 从JDBC、HTTP、Groovy和Jython中访问PL/SQL 31316.1 通过JDBC访问PL/SQL存储过程 313 问题 313 解决方案 313 原理分析 31516.2 从JDBC中访问PL/SQL存储函数 316 问题 316 解决方案 316 原理分析 31716.3 通过HTTP访问PL/SQL过程 318 问题 318 解决方案 318 原理分析 32116.4 从Jython中访问PL/SQL 322 问题 322 原理分析 32416.5 从Groovy访问PL/SQL 325 问题 325 解决方案 325 原理分析 325第17章 用utPLSQL进行单元测试 32717.1 使用单元测试来测试PL/SQL代码 327 问题 327 解决方案 327 原理分析 32917.2 安装utPLSQL单元测试框架 329 问题 329 解决方案 329 原理分析 33017.3 构建utPLSQL测试包 331 问题 331 解决方案 331 原理分析 33217.4 编写utPLSQL单元测试过程 332 问题 332 解决方案 333 原理分析 33417.5 运行utPLSQL测试 335 问题 335 解决方案 335 原理分析 33817.6 构建utPLSQL测试套件 338 问题 338 解决方案 338 原理分析 33817.7 运行utPLSQL测试套件 339 问题 339 解决方案 339 原理分析 34517.8 重新配置utPLSQL参数 345 问题 345 解决方案 346 原理分析 34617.9 将utPLSQL测试结果重定向到文件 348 问题 348 解决方案 348 原理分析 34817.10 用Ant自动运行PL/SQL和Java存储过程的单元测试 349 问题 349 解决方案 350 原理分析 351索引 355
编辑推荐
Oracle PL/SQL攻略cle专家20余年实战经验的结晶。采用“问题—原理分析—解决方案”的形式,循序渐进、针对性强。摆脱按部就班的学习顺序,按图索骥,找到相关问题的破解方法。
图书封面
图书标签Tags
无
评论、评分、阅读与下载