编辑推荐
暂无
内容简介
本书分为三篇,具体内容如下:基础篇介绍PL/SQL程序设计的基础知识,包括PL/SQL概述、PL/SQL开发工具、PL/SQL基础、PL/SQL控制语句、数据查询、数据操纵与事务处理、内置SQL函数、PL/SQL中的静态SQL语句、记录以及错误处理等。开发篇主要介绍PL/SQL命名对象的开发,包括PL/SQL子程序、PL/SQL包、子程序依赖性与权限管理、触发器、集合、动态SQL、批绑定等,是PL/SQL程序设计的核心部分。在Oracle项目开发过程中,PL/SQL程序设计的主要任务就是根据业务需要编写各种功能模块,即PL/SQL命名块。高级篇主要介绍Oracle数据库中的对象及其特性、大对象的存储与操作、任务调度管理、PL/SQL性能优化、常用的Oracle内置包等。
作者简介
暂无
目录
前 言
基 础 篇
第1章 PL/SQL概述
1.1 什么是PL/SQL
1.2 PL/SQL优点
1.3 PL/SQL特性
1.4 PL/SQL运行机制
1.4.1 PL/SQL引擎
1.4.2 PL/SQL单元与编译参数
1.5 PL/SQL 12.1新特性
1.6 案例数据库介绍
1.6.1 案例数据库表与序列
1.6.2 创建表与序列
1.6.3 向表中插入数据
1.7 使用Oracle文档
1.8 小结
第2章 PL/SQL开发工具的使用
2.1 SQL Plus
2.1.1 SQL Plus简介
2.1.2 SQL Plus的启动与退出
2.1.3 SQL Plus常用命令
2.2 SQL Developer
2.2.1 SQL Developer简介
2.2.2 创建数据库连接
2.2.3 浏览与管理数据库对象
2.2.4 执行SQL语句
2.2.5 开发PL/SQL程序
2.2.6 执行与调试PL/SQL程序
2.3 PL/SQL Developer
2.3.1 PL/SQL Developer简介
2.3.2 连接数据库
2.3.3 编写与运行PL/SQL程序
2.3.4 测试PL/SQL程序
2.4 小结
第3章 PL/SQL基础
3.1 PL/SQL程序结构
3.1.1 PL/SQL块结构
3.1.2 PL/SQL块分类
3.2 PL/SQL词法单元
3.2.1 字符集
3.3.2 标识符
3.2.3 分隔符
3.2.4 字面值
3.2.5 注释
3.3 PL/SQL数据类型
3.3.1 PL/SQL数据类型概述
3.3.2 字符类型
3.3.3 数字类型
3.3.4 日期/时间类型
3.3.5 布尔类型
3.3.6 复合类型
3.3.7 引用类型
3.3.8 LOB类型
3.3.9 %TYPE属性
3.3.10 %ROWTYPE属性
3.4 PL/SQL变量与常量
3.4.1 常量与变量的声明
3.4.2 变量作用域与可见性
3.5 运算符与表达式
3.5.1 运算符
3.5.2 表达式
3.6 编译指示
3.7 小结
第4章 PL/SQL控制语句
4.1 条件选择语句
4.1.1 IF语句
4.1.2 CASE语句
4.2 循环语句
4.2.1 简单循环语句
4.2.2 WHILE循环语句
4.2.3 FOR循环语句
4.2.4 CONTINUE语句
4.3 顺序控制语句
4.3.1 GOTO语句
4.3.2 NULL语句
4.4 小结
第5章 数据查询
5.1 SQL语言概述
5.1.1 SQL语言介绍
5.1.2 SQL语言的分类
5.1.3 SQL语言的特点
5.2 SELECT语句基本语法
5.3 简单查询
5.3.1 无条件查询
5.3.2 有条件查询
5.4 查询排序
5.5 分组查询
5.5.1 常用的聚集函数
5.5.2 分组查询的语法
5.5.3 单列分组查询
5.5.4 多列分组查询
5.5.5 使用HAVING子句
5.5.6 使用ROLLUP 和CUBE子句
5.5.7 合并分组查询
5.6 连接查询
5.6.1 笛卡尔积连接
5.6.2 内连接
5.6.3 自然连接
5.6.4 使用USING子句的连接
5.6.5 外连接
5.7 子查询
5.7.1 子查询概述
5.7.2 单行单列子查询
5.7.3 多行单列子查询
5.7.4 单行多列子查询
5.7.5 多行多列子查询
5.7.6 相关子查询
5.7.7 在FROM子句中使用子查询
5.7.8 在DDL语句中使用子查询
5.7.9 使用WITH子句的子查询
5.8 层次查询
5.8.1 层次结构的概念
5.8.2 层次查询的语法
5.8.3 层次查询的执行过程
5.8.4 层次查询相关伪列
5.9 集合查询
5.9.1 UNION
5.9.2 UNION ALL
5.9.3 INTERSECT
5.9.4 MINUS
5.10 分析查询
5.10.1 分析查询概述
5.10.2 分析查询的语法
5.10.3 分析函数的应用
5.11 TOPN与分页查询
5.11.1 Oracle 12c之前的TOPN与分页查询
5.11.2 Oracle 12c中的TOPN与分页查询
5.12 小结
第6章 数据操纵与事务控制
6.1 数据插入
6.1.1 数据插入介绍
6.1.2 INSERT语句的语法
6.1.3 插入单行记录
6.1.4 使用子查询插入数据
6.1.5 使用DirectPath方法插入数据
6.1.6 无条件多表插入
6.1.7 有条件多表插入
6.2 数据修改
6.2.1 UPDATE语句的语法
6.2.2 使用子查询修改数据
6.3 MERGE语句
6.4 数据删除
6.4.1 DELETE语句的语法
6.4.2 使用子查询删除数据
6.4.3 使用TRUNCATE清除数据
6.5 事务控制
6.5.1 事务概述
6.5.2 Oracle事务的隔离级别
6.5.3 使用SET TRANSACTION语句设置事务
6.5.4 事务提交与回滚
6.6 锁
6.6.1 Oracle数据库中锁的分类
6.6.2 Oracle数据库中的DML锁
6.6.3 使用LOCK TABLE语句
6.7 小结
第7章 内置SQL函数
7.1 内置SQL函数概述
7.2 单行函数
7.2.1 数字函数
7.2.2 字符函数
7.2.3 日期函数
7.2.4 转换函数
7.2.5 空值函数
7.2.6 其他单行函数
7.3 聚集函数
7.4 分析函数
7.5 其他函数
7.6 小结
第8章 PL/SQL中的静态SQL语句
8.1 静态SQL语句概述
8.1.1 静态SQL语句类型
8.1.2 PL/SQL中的SELECT语句
8.1.3 PL/SQL中的DML语句
8.1.4 PL/SQL中的字符匹配
8.2 显式游标
8.2.1 游标概述
8.2.2 声明与定义显式游标
8.2.3 打开与关闭显式游标
8.2.4 检索显式游标
8.2.5 显式游标的属性
8.2.6 显式游标定义中的变量
8.2.7 参数化显式游标
8.2.8 FOR UPDATE游标
8.3 隐式游标
8.3.1 隐式游标介绍
8.3.2 隐式游标的属性
8.4 游标变量
8.4.1 游标变量简介
8.4.2 声明游标变量
8.4.3 打开与关闭游标变量
8.4.4 检索游标变量
8.5 游标表达式
8.6 自治事务
8.6.1 自治事务的概念
8.6.2 声明自治程序
8.6.3 自治事务的控制
8.6.4 自治触发器
8.7 小结
第9章 记录
9.1 记录类型概述
9.2 声明记录类型
9.3 记录类型变量
9.3.1 声明记录类型变量
9.3.2 利用%ROWTYPE声明记录类型变量
9.3.3 记录类型变量赋值
9.4 记录类型变量的应用
9.4.1 记录类型变量在SELECT语句中的应用
9.4.2 记录类型变量在INSERT语句中的应用
9.4.3 记录类型变量在UPDATE语句中的应用
9.4.4 DML语句中记录类型变量使用的限制
9.5 小结
第10章 错误处理
10.1 编译警告
10.2 异常处理概述
10.2.1 Oracle错误处理机制
10.2.2 使用异常处理的优点
10.3 异常的类型
10.3.1 预定义异常
10.3.2 内部定义异常
10.3.3 用户定义异常
10.4 抛出异常
10.4.1 用户定义异常的抛出
10.4.2 预定义异常的抛出
10.4.3 内部定义异常的抛出
10.4.4 重新抛出当前异常
10.4.5 RAISE_APPLICATION_ERROR方法的使用
10.5 捕获与处理异常
10.5.1 异常处理器
10.5.2 OTHERS异常处理器
10.6 异常的传播
10.6.1 执行部分异常的传播
10.6.2 声明部分与异常处理部分异常的传播
10.7 异常处理策略
10.7.1 异常处理的基本原则
10.7.2 异常的范围
10.7.3 避免未处理的异常
10.7.4 异常与事务
10.7.5 错误位置标识
10.8 小结
开 发 篇
第11章 PL/SQL子程序
11.1 PL/SQL子程序概述
11.1.1 PL/SQL子程序的概念与分类
11.1.2 PL/SQL子程序的优点
11.2 独立子程序
11.2.1 子程序结构
11.2.2 创建存储过程
11.2.3 创建函数
11.3 调用子程序
11.3.1 调用存储过程
11.3.2 在PL/SQL程序中调用函数
11.3.3 在SQL语句中调用函数
11.4 子程序参数
11.4.1 形式参数与实际参数
11.4.2 参数的传递方式
11.4.3 参数模式
11.4.4 NOCOPY关键字
11.4.5 参数的约束
11.4.6 IN模式参数默认值
11.4.7 无参子程序
11.4.8 实参与形参的对应关系
11.5 嵌套子程序
11.5.1 嵌套子程序的概念
11.5.2 嵌套子程序的创建
11.5.3 嵌套子程序的向前声明
11.5.4 嵌套子程序的重载
11.6 独立子程序的管理
11.7 小结
第12章 PL/SQL包
12.1 包概述
12.1.1 包的概念
12.1.2 包的分类
12.1.3 使用包的优点
12.2 创建包
12.2.1 包规范
12.2.2 包体
12.3 调用包
12.4 重载包
12.5 实例化与初始化包
12.6 包的纯度等级
12.7 包的状态
12.7.1 变量持续性
12.7.2 游标持续性
12.7.3 SERIALLY_REUSABLE包
12.8 包编写指南
12.9 STANDARD包
12.10 包管理
12.11 小结
第13章 子程序依赖性与权限管理
13.1 对象依赖性概述
13.1.1 对象依赖性的概念
13.1.2 对象依赖关系查询
13.2 子程序的本地依赖性
13.2.1 子程序的依赖关系
13.2.2 包的依赖性关系
13.3 子程序的远程依赖性
13.3.1 远程依赖关系的建立
13.3.2 远程依赖失效的识别
13.4 子程序权限概述
13.4.1 子程序调用需要的权限
13.4.2 子程序定义者需要的权限
13.5 调用者权限与定义者权限
13.6 小结
第14章 触发器
14.1 触发器简介
14.1.1 触发器的概念
14.1.2 触发器的作用
14.1.3 触发器的种类
14.1.4 触发器的结构
14.2 简单的DML触发器
14.2.1 简单DML触发器概述
14.2.2 语句级简单DML触发器
14.2.3 行级简单DML触发器
14.2.4 简单DML触发器的执行顺序
14.3 INSTEAD OF DML触发器
14.3.1 INSTEAD OF DML触发器概述
14.3.2 创建INSTEAD OF DML触发器
14.3.3 基于视图嵌套表列的INSTEAD OF DML触发器
14.4 复合DML触发器
14.4.1 复合DML触发器概述
14.4.2 创建复合DML触发器
14.4.3 复合DML触发器应用
14.5 利用DML触发器保证引用完整性
14.6 系统触发器
14.6.1 系统触发器的响应事件
14.6.2 创建系统触发器
14.6.3 事件属性函数
14.7 变异表触发器
14.7.1 变异表触发器的限制
14.7.2 变异表触发器应用
14.8 触发器设计指南
14.9 触发器管理
14.9.1 触发器定义的限制
14.9.2 触发器的禁用与激活
14.9.3 触发器的修改、重编译与删除
14.9.4 触发器的信息查询
14.10 小结
第15章 集合
15.1 集合概述
15.2 联合数组
15.2.1 联合数组概述
15.2.2 定义联合数组
15.2.3 操作联合数组
15.3 嵌套表
15.3.1 嵌套表概述
15.3.2 定义嵌套表
15.3.3 初始化嵌套表
15.3.4 操作嵌套表
15.4 可变数组
15.4.1 可变数组概述
15.4.2 可变数组的定义与初始化
15.4.3 操作可变数组
15.5 集合方法
15.6 集合类型变量的比较
15.6.1 集合类型变量与NULL的比较
15.6.2 嵌套表变量比较
15.6.3 嵌套表变量多集合条件比较
15.7 独立集合类型
15.7.1 嵌套表在数据库中的应用
15.7.2 可变数组在数据库中的应用
15.8 在包中定义的集合类型
15.9 多维集合
15.10 小结
第16章 动态SQL语句
16.1 动态SQL语句概述
16.1.1 动态SQL语句的概念
16.1.2 动态SQL语句与静态SQL语句的比较
16.2 本地动态SQL
16.2.1 EXECUTE IMMEDIATE语句
16.2.2 动态DDL操作
16.2.3 动态DCL操作
16.2.4 动态DML操作
16.2.5 动态单行查询操作
16.2.6 动态多行查询操作
16.2.7 在动态SQL语句中调用子程序
16.2.8 动态SQL语句中的重名占位符
16.3 DBMS_SQL包
16.3.1 DBMS_SQL包概述
16.3.2 DBMS_SQL包中方法介绍
16.3.3 DBMS_SQL操作流程
16.3.4 使用DBMS_SQL包执行动态DDL语句
16.3.5 使用DBMS_SQL包进行动态DML语句
16.3.6 使用DBMS_SQL包执行动态查询语句
16.3.7 使用DBMS_SQL包执行匿名块
16.3.8 其他常用DBMS_SQL方法应用
16.4 小结
第17章 批绑定
17.1 批绑定概述
17.2 FORALL语句
17.2.1 FORALL语句的语法
17.2.2 FORALL语句与FOR LOOP语句比较
17.2.3 批量DML操作
17.2.4 使用稀疏集合的FORALL语句
17.2.5 FORALL语句的异常处理
17.2.6 获取FORALL语句影响的记录数量
17.3 BULK COLLECT短语
17.3.1 SELECT BULK COLLECT语句
17.3.2 FETCH BULK COLLECT语句
17.3.3 RETURNING BULK COLLECT短语
17.4 动态批绑定
17.4.1 动态批量DML操作
17.4.2 动态批查询操作
17.5 小结
高 级 篇
第18章 对象
18.1 Oracle对象概述
18.1.1 Oracle对象简介
18.1.2 使用Oracle对象的优势
18.1.3 Oracle数据库的对象特性
18.2 对象类型定义
18.2.1 对象类型规范
18.2.2 对象类型体
18.3 对象类型方法
18.3.1 MEMBER方法
18.3.2 STATIC方法
18.3.3 MAP与ORDER方法
18.3.4 构造方法
18.4 对象类型的继承
18.4.1 对象类型继承概述
18.4.2 FINAL与NOT FINAL对象类型与方法
18.4.3 创建子对象类型
18.4.4 方法重定义与重载
18.4.5 NOT INSTANTIABLE对象类型与方法
18.5 操作数据库中对象
18.5.1 创建对象表
18.5.2 操作对象表
18.5.3 操作列对象
18.5.4 对象引用
18.6 对象视图
18.6.1 对象视图概述
18.6.2 创建对象视图
18.6.3 在对象视图中嵌套对象
18.6.4 操作对象视图
18.7 在PL/SQL中使用对象类型
18.7.1 对象的声明与初始化
18.7.2 操作PL/SQL中的对象
18.8 与对象相关的函数和操作符
18.9 对象类型的管理
18.9.1 修改对象类型
18.9.2 删除对象类型
18.10 小结
第19章 大对象
19.1 大对象概述
19.1.1 为什么使用大对象
19.1.2 LOB与LONG的比较
19.1.3 LOB分类
19.1.4 LOB存储结构与定位器
19.1.5 LOB操作技术与接口
19.2 利用SQL操纵LOB对象
19.2.1 创建包含LOB列的数据库表
19.2.2 利用SQL操作内部LOB
19.2.3 利用SQL操作外部LOB
19.3 DBMS_LOB包
19.3.1 DBMS_LOB包简介
19.3.2 DBMS_LOB包中子程序介绍
19.4 利用PL/SQL操纵LOB对象
19.4.1 利用DBMS_LOB包操作CLOB对象
19.4.2 利用DBMS_LOB包操作BLOB对象
19.4.3 利用DBMS_LOB包操作BFILE对象
19.5 小结
第20章 Oracle任务调度
20.1 Oracle调度器概述
20.1.1 Oracle调度器的概念
20.1.2 调度对象
20.2 作业对象管理
20.2.1 创建作业对象
20.2.2 修改作业对象
20.2.3 运行作业对象
20.2.4 停止作业对象
20.2.5 删除作业对象
20.2.6 禁用作业对象
20.2.7 激活作业对象
20.3 程序对象管理
20.4 调度对象管理
20.5 小结
第21章 PL/SQL性能优化
21.1 PL/SQL性能优化简介
21.2 子程序内联
21.3 SQL语句优化
21.3.1 SQL语句优化概述
21.3.2 SQL语句执行过程
21.3.3 将常用程序驻留内存
21.3.4 有效使用索引
21.3.5 采用适当的多表连接技术
21.3.6 SQL语句使用技巧
21.4 最小化CPU载荷
21.4.1 优化查询中的函数调用
21.4.2 优化子程序调用
21.4.3 优化循环
21.4.4 优化用于计算的PL/SQL代码
21.4.5 使用SQL字符函数
21.4.6 批SQL与批绑定
21.5 管道函数的使用
21.5.1 表函数概述
21.5.2 创建管道表函数
21.5.3 管道表函数作为转换函数
21.5.4 检索管道表函数的返回结果集
21.5.5 向管道表函数传递游标表达式
21.6 性能优化工具
21.6.1 使用Profiler API工具
21.6.2 使用Trace API工具
21.6.3 使用PL/SQL hierarchical profiler工具
21.7 小结
第22章 常用的Oracle内置包
22.1 Oracle内置包简介
22.2 DBMS_ALERT包
22.3 DBMS_DDL包
22.4 DBMS_FLASHBACK包
22.5 DBMS_METADATA包
22.5.1 DBMS_METADATA包简介
22.5.2 DBMS_METADATA包中子程序
22.6 DBMS_LOGMNR包
22.7 DBMS_LOGMNR_D包
22.8 DBMS_PIPE包
22.8.1 Oracle管道通信概述
22.8.2 DBMS_PIPE包中子程序
22.9 DBMS_RANDOM包
22.10 DBMS_ROWID包
22.11 DBMS_TRANSACTION包
22.12 UTL_FILE包
22.13 UTL_TCP包
22.14 小结
 ;
前沿
Preface 前 言为什么要写这本书在信息技术高速发展的今天,任何的大型信息系统都是以数据库技术为支撑的。Oracle数据库作为数据库领域的先驱者,凭借其雄厚的技术实力,以高稳定性、可伸缩性、高可靠性、高安全性、跨平台特性等得到业界的一致认可,成为数据库市场名副其实的领军者,遍布于工业、商业、金融、保险、航空等各个领域。在数据库市场,Oracle数据库产品的市场占有率高达50%,远远领先于其他数据库产品,可以不夸张地说,Oracle数据库产品已经遍布世界的每个角落。作为Oracle数据库的过程化的SQL语言,PL/SQL程序在Oracle项目开发过程中得到广泛应用,有Oracle数据库应用的地方,就有PL/SQL程序的应用。因此,系统深入地学习PL/SQL程序设计是Oracle数据库开发所必需的。
虽然PL/SQL程序设计的官方文档是公开的,但是这些文档都是独立成篇的,没有清晰的体系结构,只是各种知识点的无机综合,使得读者在浩瀚的文档细节描述中、在文档链接的不断跳转中迷失了自我,既抓不住重点,又没能形成一套清晰的知识体系结构。PL/SQL程序设计的官方文档确实是最权威的,但是由于其组织得有些杂乱,不适合PL/SQL程序设计的初学者。因此,笔者一直在考虑如何有机地组织PL/SQL程序设计的知识体系,为PL/SQL程序设计的初学者提供一条捷径,帮助其剥离过多的细枝末节,循序渐进、深入浅出、由基础到高级地系统学习PL/SQL程序设计。
本书全面、系统、深入地介绍了PL/SQL语言的开发技术,包括PL/SQL程序设计基础、PL/SQL核心开发技术以及PL/SQL高级应用等。学习完本书,读者应该可以更加全面地掌握PL/SQL语言。
读者对象本书是关于Oracle 12c PL/SQL程序设计的学习与参考书籍,既可以作为PL/SQL程序设计初学者的教材,也可以作为有一定基础的PL/SQL程序设计的读者的参考资料。
PL/SQL程序设计初学者通过本书学习,读者既可以系统了解PL/SQL程序设计的知识体系,又可以学习PL/SQL程序设计的应用。
接受过短期PL/SQL程序设计技术培训但没有系统学习过PL/SQL程序设计的从业人员这部分读者对部分PL/SQL程序设计比较熟悉,但所学知识缺乏连贯性、系统性。通过对本书的学习,这些从业人员可以进一步完善PL/SQL程序设计,掌握PL/SQL程序设计的总体知识体系。
有兴趣参加OCP认证考试的人本书内容几乎覆盖了OCP认证开发方面的所有内容,但重点强调的是实际工作中能力的培养。读者可以通过详实的案例分析与实践掌握OCP认证内容的学习。
从事PL/SQL程序设计的人这部分读者可以将本书作为PL/SQL程序设计技术的参考手册,以本书的组织架构为主线,结合Oracle数据库官方开发技术文档,深入学习Oracle数据库的开发技术。
如何阅读本书本书分为三篇,具体内容如下:
基础篇(第1~10章)主要介绍PL/SQL程序设计的基础知识,包括PL/SQL概述、PL/SQL开发工具、PL/SQL基础、PL/SQL控制语句、数据查询、数据操纵与事务处理、内置SQL函数、PL/SQL中的静态SQL语句、记录以及错误处理等。
开发篇(第11~17章)主要介绍PL/SQL命名对象的开发,包括PL/SQL子程序、PL/SQL包、子程序依赖性与权限管理、触发器、集合、动态SQL、批绑定等,是PL/SQL程序设计的核心部分。在Oracle项目开发过程中,PL/SQL程序设计的主要任务就是根据业务需要编写各种功能模块,即PL/SQL命名块。
高级篇(第18~22章)主要介绍Oracle数据库中的对象及其特性、大对象的存储与操作、任务调度管理、PL/SQL性能优化、常用的Oracle内置包等。
如果读者对PL/SQL程序设计有一定的了解,并有一定的PL/SQL程序设计开发经历,那么可以略过基础篇的阅读;如果读者是PL/SQL程序设计的初学者,那么可以侧重本书基础篇与开发篇的学习;如果读者有一定的PL/SQL程序设计经验,可以侧重高级篇的学习;如果读者比较熟悉PL/SQL程序设计,可以将本书作为参考手册查阅使用。
勘误和支持本书基础篇由广西中烟工业有限责任公司的郭晓惠撰写,开发篇由大连东软信息学院的王澜撰写,高级篇由大连东软信息学院的孙风栋撰写。此外,参加本书工作的还有:闫海珍、陈艳秋、袁磊、马李昕、郑纯军、熊耀华、李绪成、李翔坤、张冬青、宋晓慧、刘蕾、王红、张阳、程卓、邓丽、褚娜、樊晓勇、李慧、周兴恩、骆伟、杨永虎、陈明华、刘振宇、姜敏、刘珊娜、刘筱筠、宋维刚、王杜娟、刘洪义、曹玉琳、郑东霞、王文生、陈鹏、刘冰月、何宗刚、郑俊生、刘亚辉、务梦新等。由于作者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。
致谢本书从酝酿、规划、写作到出版历时2年多。在此期间得到了众多同事、师长、朋友、亲人的帮助,在此向他们表示真挚的感谢!
感谢本书的合作者王澜和郭晓惠,他们在繁忙的工作之余将自己多年的PL/SQL程序开发经验融入本书中,精益求精,高质量地完成了写作任务。
感谢机械工业出版社华章公司的两位编辑:杨福川和姜影,在这两年多的时间中他们始终支持我的写作,他们的鼓励和帮助引导我顺利完成全部书稿。
最后感谢我的家人,感谢他们对我忙于写作本书而“两手不做家务事”的理解和支持!特别感谢我的女儿孙萌璐小朋友,在枯燥的书籍写作过程中为我带来了欢声笑语!
谨以此书献给所有我爱的和爱我的人,以及所有为本书写作、出版提供帮助的朋友!
孙风栋
Oracle 12c PL/SQL程序设计终极指南 pdf下载声明
本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版