Oracle PL/SQL必知必会

978-7-115-43921-5
作者: 【美】Ben Forta(本 福达)
译者: 傅强
编辑: 傅道坤

图书目录:

详情

本书本书作为PL/SQL的入门级读物,主要讲述了PL/SQL工具集的使用、基本的数据操作、联结相关表、组合查询、使用视图、创建和修改表以及创建和使用存储过程、游标等内容。本书内容浅显易懂,比较适合对Oracle PL/SQL查询语言感兴趣的读者阅读。

图书摘要

版权信息

书名:Oracle PL/SQL必知必会

ISBN:978-7-115-43921-5

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著     [美] Ben Forta

  译    傅 强

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Ben Forta: Sams Teach Yourself Oracle PL/SQL in 10 Minutes

ISBN: 0672328666

Copyright © 2015 by Pearson Education, Inc.

Authorized translation from the English languages edition published by Pearson Education, Inc.

All rights reserved.

本书中文简体字版由美国Pearson公司授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。


PL/SQL是Oracle数据库对SQL语句的扩展,在普通SQL语句的使用上添加了编程语言的特点,在数据库编程领域有着广泛的应用。

本书作为《SQL必知必会(第4版)》畅销图书的全新升级版,由浅入深地讲解了Oracle PL/SQL的基本概念和语法,涉及SQL基础知识、Oracle和PL的基本知识、使用Oracle、检索数据、对检索的数据进行排序、过滤数据、高级数据过滤、使用通配符过滤、使用正则表达式执行搜索、创建计算字段、使用数据操作函数、汇总数据、组合数据、使用子查询、连接表、创建高级连接、组合查询、插入数据、更新和删除数据、创建和操作表、使用视图、使用存储过程、使用游标、使用触发器、管理事务处理、管理安全性等内容。

本书适合零基础的SQL初学者、刚开始接触Oracle PL/SQL并且想要深入学习的读者阅读。


Ben Forta在计算机行业具有30年的从业经验,从事产品设计和开发、支持、培训以及市场营销方面的工作。作为Adobe公司教育计划(Education Initiatives)的高级主管,他花了大量的时间从事Adobe产品相关的教学、讨论和写作工作,以及编码、应用程序开发、创意、数字素养方面的工作,并且积极提供反馈,帮助Adobe确定产品未来的发展方向。

Ben写作了40多本图书,包括世界上畅销的SQL图书,以及其他多种主题的图书,比如正则表达式(Regular Expression)、移动开发和Adobe ColdFusion。这些图书的英文版印刷数量超过了75万册,并且被翻译成15种语言,其中许多图书被世界上的多所学院和大学用作教材。

教育工作是Ben的至爱。除了写作、演讲和课堂实践之外,Ben把他的全部时间都奉献于教学、启迪他人以及分享他对技术和创意的热爱。能够有机会与全世界数百万人分享他的知识,他对此十分感激。

Ben还是一位成功的创业立,具有创立、建设和出售创业公司的经验。他是一位广受欢迎的演说家、作家和博客作者,并向全世界介绍教育和开发方面的主题。


我的第一本关于SQL的图书(Sams Teach Yourself SQL in 10 Minutes)出版已有16年了。这本书获得了相当多的积极反馈,以至于已经更新了3次,衍生出了另外4本图书(最近的就是你此刻正在阅读的这本书),并且被翻译了十多次。这本小册子的各种版本帮助了成千上万的人学习SQL的基础知识。因此,首先要感谢多年来所有信任我和这本书的人,你们的支持让我诚惶诚恐,也让我感到非常自豪。

我非常荣幸,能够拥有一些直言不讳、观点有理有据的读者,他们定期分享自己的思想、评论和建议,偶尔也会有一些批评。这些衍生版本的图书将会继续改进,以直接响应那些来自读者的反馈,因此要感谢这些读者,请继续发表你们的意见。

感谢世界上为数众多的学校和学院,把这一系列图书作为它们课程设置的一部分。看到学生把我的作品用作他们学习的一部分,这对我来说是一种永远的激励。

最后,要感谢我在Pearson的合作伙伴,在他们的帮助下,我现在已经出版了40多本书,没有他们的支持,这些书将不会问世。我要特别感谢Betsy Gratner、Paula Lowell和Mark Taber。Betsy Gratner引导了本书的出版过程,Paula Lowell在图书编辑方面提供了帮助,Mark Taber则在我对他的方式表现得极不耐烦时再次表现出了极大的耐心并提供了一如既往的支持。


傅强,中央财经大学财经研究院教授、副院长、博士生导师,持有英国曼彻斯特大学经济学硕士学位和英国赫尔大学经济学博士学位。从1997~2000年,在英国森德兰大学计算机、工程与技术学院从事博士后研究工作,主要负责的是由欧联盟资助的欧洲中小企业供应链管理的计算机软件研发项目。从2000~2003年,在摩托罗拉英国公司第一研究室担任高级研究员,主要从事基于贝叶斯网络技术的软件质量管理决策系统的研发,并拥有两项发明专利。从2003~2005年,担任北京大学联泰供应链系统研究发展中心执行主任,主要从事物流与供应链管理理论研究以及围绕制衣、制鞋、零售和物流四大行业八个研究项目的管理工作。2005年7月~2016年6月,担任中央财经大学经济社会仿真实验室主任,主要从事金融理论和应用,能源系统仿真以及物流与供应链管理理论和实践方面的研究,并负责实验室日常的行政及科研项目管理。2016年7月至今,担任中央财经大学财经研究院副院长,主要从事金融计量学、区域经济学和国别研究等,有着较深的学术造诣和在中英两国高校及研究机构丰富的工作实践经验。


Oracle Database(或Oracle RDBMS)是如此流行并且获得了广泛的认可,以至于大多数用户将其简称为“Oracle”(忽略了Oracle公司制作其他软件甚至硬件的事实)。Oracle Database(我将像大多数人那样将其简称为“Oracle”,以使事情变得简单)从20世纪70年代起就出现了,成为最早的数据库管理系统之一。Oracle是世界上最常用的数据库管理系统(Database Management System,DBMS)之一。事实上,大多数调查都将其视为全世界最流行的数据库,尤其是在企业用户当中,多年来它已证明自己是各类数据存储需求的一种稳定、可靠、快速和值得信任的解决方案。

这是好消息,但是不那么好的消息则是在人们刚接触Oracle时可能觉得比较复杂,尤其是与一些替代性的DBMS相比。Oracle的强大功能、能力、安全性等是它为什么如此受信任的重要原因。但是,这也让安装、配置甚至操作也变得更复杂。最重要的是,Oracle的SQL语言的实现(称为PL/SQL)与其他SQL实现具有细微的区别,这可能使得使用Oracle要更为复杂。

本书基于我的畅销书Sams Teach Yourself SQL in 10 Minutes,该书已经成为世上常用的SQL教程之一,它重点强调的是条理清晰、系统且简单地讲述你确实需要知道的内容。不过,尽管该书非常流行且大获成功,但它也有下面这些局限性。

本书应运而生。本书是以Sams Teach Yourself SQL in 10 Minutes一书成熟的教程和结构为基础创作的,除了Oracle和PL/SQL之外,没有把笔墨浪费在其他任何方面。本书从简单的数据检索开始,逐步深入到更复杂的主题,包括连接的使用、子查询、正则表达式、基于全文的检索、存储过程、游标、触发器、表约束等。你将条理清晰、系统并且简便地从中学习所需要知道的内容——旨在使你能够立即、轻松地提升课程的学习效率。

本书针对的是以下读者:

值得指出的是,本书并不适合所有的读者阅读。如果你是一位经验丰富的SQL用户,那么你可能会发现本书中的内容太初级。不过,如果你属于以上几类读者之一,你将发现本书是加快Oracle学习进度最快速、最容易的方式。

本书的配套Web站点是forta.com/books/0672328666,它提供了以下内容。


在本章中,你将学习数据库和SQL的相关知识,它们是学习Oracle和PL/SQL的前提。

你正在阅读本书的事实表明你需要以某种方式与数据库交互。因此,在深入学习Oracle及其SQL语言的实现(PL/SQL)之前,了解一些关于数据库和数据库技术的基本概念就很重要。

无论知道与否,你事实上一直都在使用数据库。每次从电子邮件或智能手机通讯录中选择一个名字时,就是在使用数据库。当在Internet搜索站点上执行搜索时,也是在使用数据库。当在工作中登录到网络时,将对照数据库验证你的名字和密码。甚至在自动取款机上使用ATM卡时,同样在使用数据库,以进行PIN验证和余额检查。

但是,即使我们一直都在使用数据库,对于数据库到底是什么仍然认识不清。事实的确如此,因为不同的人使用“数据库”一词来指代不同的事物。因此,一个良好的学习起点是:利用一份列表解释最重要的数据库术语。

提示:复习基本概念


下面简要概述了一些基本的数据库概念。如果你已经具有一些数据库使用经验,下面的内容将唤醒你的记忆;如果你是新手,那么以下内容将给你提供绝对基础的知识。理解数据库是掌握Oracle的一个重要部分,你可能想要寻找一个关于数据库基本原理的优秀图书,以在需要时复习一下相关的主题。

人们以多种不同的方式使用数据库(Database)这个术语,但是在我们看来,数据库是指以某种有组织的方式存储的数据集合。理解它的最简单的方式是把数据库想象成一个档案柜。档案柜只是存储数据的物理位置,而不管数据是什么以及它们是怎样组织的。

数据库


用于存储有组织的数据的容器(通常是文件或文件集)。

警告:滥用导致混淆


人们经常使用数据库(database)这个术语来指代他们正在运行的数据库软件。这是不正确的,它是大量混淆之源。数据库软件实际上被称为数据库管理系统(Database Management System,DBMS)。数据库是通过DBMS创建和操作的容器。数据库可能是存储在硬盘驱动器上的文件,但也可能不是。一般而言,这甚至是不重要的,因为你从来不会以任何方式直接访问数据库;你总是使用DBMS,它会为你访问数据库。

当在档案柜中存储信息时,不会把信息简单地扔进抽屉里。相反,将在档案柜里创建文件,然后把相关的数据归档在特定的文件中。

在数据库世界里,这个文件称为(Table)。表是结构化的文件,可以存储特定类型的数据。表可能包含顾客列表、产品目录,或者其他任何信息列表。


特定类型数据的结构化列表。

这里的关键是:存储在表中的数据是一种数据类型或者一份列表。你永远不会把顾客列表和订单列表存储在同一个数据库表中。如果这样做,将使往后的检索和访问难以进行。相反,你将创建两个表,每个表用于存储一份列表。

数据库中的每个表都具有一个用于标识它的名称,这个名称总是唯一的,意味着该数据库中没有其他的表可以具有相同的名称。

注意:表名称


使表名称成为唯一的实际上是几个内容的组合,包括数据库名称和表名称。这意味着尽管不能在相同的数据库中多次使用相同的表名称,但是肯定可以在不同的数据库中重用表名称。

表具有一些特征和属性,定义了怎样在其中存储数据。它们包括一些信息,比如可能存储什么数据,如何分解它以及如何命名信息等。这个描述表的信息集称为模式(Schema),模式描述了数据库内的特定表和整个数据库以及数据库内的表之间的关系(如果有的话)。

模式


关于数据库以及表布局和属性的信息。

注意:模式还是数据库?


偶尔也把模式(Schema或Schemata)用作数据库(Database)的同义词。遗憾的是,通常可以从上下文来清晰得知模式要表达的意思,在本书中,模式是指上述的定义。

表由列组成,列包含表中特定的信息。


表中的单个字段。所有的表都由一列或多列组成。

理解列的最佳方式是把数据库表想象成网格,它有点像电子数据表,网格中的每一列都包含特定的信息。例如,在顾客表中,一列包含顾客编号,另一列包含顾客名字,而地址、城市、州和邮政编码都存储在它们各自的列中。

提示:分解数据


正确地把数据分解到多个列中极其重要。例如,城市、州和邮政编码应该总是存储在单独的列中。通过分解它们,就有可能按特定的列排序或筛选数据(例如,查找特定州或特定城市的所有顾客)。如果把城市和州结合进一列中,按州进行排序或筛选将极其困难。

数据库中的每一列都具有一种关联的数据类型,它定义了列中可以包含什么类型的数据。例如,如果列将包含数字(也许是订单中的商品数量),那么数据类型将是一种数值数据类型。如果列将包含日期、文本、注释、货币金额等,将使用相应的数据类型来指定它们。

数据类型


允许的数据的类型。每个表列都具有一种与之关联的数据类型,用以限制(或允许)在该列中存储特定的数据。

数据类型限制了列可以存储的数据的类型(例如,防止把字母字符输入到数值字段中)。数据类型的使用还有助于正确地排序数据,并且在优化磁盘使用方面起着重要作用。因此,在创建表时要特别注意选择适当的数据类型。

表中的数据存储在行中;保存的每条记录都存储在它自己的行中。同样,把表想象成电子数据表样式的网格,网格中的垂直列就是表列,水平行就是表行。

例如,顾客表可能每行存储一位顾客的信息。表中的行数就是其中的记录数。


表中的记录。

注意:记录或行?


你可能听到用户在提及(Row)时把它们称为数据库记录(Record)。一般而言,可以互换使用这两个术语,但是行是技术上正确的术语。

表中的每一行都应该有某一列(或列集合)唯一地标识它。包含顾客信息的表可能为此使用顾客编号列,而包含订单信息的表则可能使用订单ID。雇员表可能使用雇员ID或雇员社会安全号(Social Security Number)列。

主键


其值唯一地标识表中的每一行的列(或列集合)。

唯一地标识表中的每一行的这个列(或列集合)称为主键(Primary Key)。可以使用主键指代特定的行。如果没有主键,更新或删除表中的特定行将变得极其困难,因为没有方法可以保证受影响的行的安全。

提示:总是要定义主键


尽管主键实际上不是必需的,但是大多数数据库设计者都会确保他们创建的每个表都具有一个主键,以使得将来的数据操作是可能的并且容易管理。

可以把表中的任意列设定为主键,只要它满足以下条件即可:

提示:主键规则


这里列出的规则是由Oracle自身强制执行的。

通常在表中的单独一列上定义主键。但是,这不是必需的,可以把多个列一起用作主键。当使用多个列时,前面列出的规则必须适用于组织主键的所有列,并且所有列的值组合起来必须是唯一的(单独的列不需要具有唯一的值)。

提示:主键的最佳实践


除了Oracle强制执行的规则外,还应该遵守多个被普遍接受的最佳实践,包括:

  • 不要更新主键列中的值;
  • 不要重用主键列中的值;
  • 不要使用主键列中可能改变的值(例如,如果使用名字作为主键来标识供应商,当供应商兼并以及更改其名字时,将不得不更改主键)。

另一种重要的键类型是外键,但是将在后面的第15章“连接表”中介绍它。

SQL(读作字母S-Q-L或者sequel)是Structured Query Language(结构化查询语言)的缩写,它是专门用于同数据库交流的语言。

与其他语言(口语(比如英语)或编程语言[比如C、Java或Python])不同,SQL是由非常少的单词组成的。这是有意而为之的。SQL被设计成做一件事并且把它做好——提供一种简单、高效的方式从数据库中读写数据。

SQL的优点是什么?

注意:特定于DBMS的SQL


尽管SQL不是一种专有语言,并且存在一个标准委员会,尝试定义所有的DBMS都可以使用的SQL语法,但是现实情况是没有哪两个DBMS完全相同地实现了SQL。本书中讲述的SQL特定于Oracle,尽管所讲述的语言中的大部分内容都可用于其他的DBMS,但是不要假定SQL语法是完全可移植的。

本书中的所有课程都使用工作示例,用以展示SQL语法,它做什么,以及解释它为什么这么做。我强烈建议你试试每个示例,以便自己身体力行地学习Oracle。

注意:你需要Oracle


显然,你需要访问一个Oracle DBMS,以便继续学习后面的内容。在第2章中将准确解释你需要什么,并且介绍几个你可以使用的安装和配置选项。

在第1章中,你学习了SQL是什么以及它为什么有用。由于SQL用于同数据库交互,因此你还复习了一些基本的数据库术语。


在本章中,你将认识Oracle和PL/SQL是什么,以及你可以使用什么工具来操作它们。

在前一章中,你学习了数据库和SQL。如所解释的那样,做所有工作(存储、检索、管理和操作数据)的实际上是数据库软件(DBMS或数据库管理系统[Database Management System])。Oracle DBMS(或者简称为Oracle)就是一个DBMS;也就是说,它是数据库软件。

Oracle已经出现很长时间了。DBMS的第一个版本是在20世纪70年代发布的,从那时起就一直定期对其进行更新和改进。Oracle的当前(在本书即将付印时)版本是12c,它是在2013年发布的,12c中的c代表cloud(云)。Oracle是部署和使用得最多的DBMS,尤其是在企业系统和基础设施内。

DBMS分为两类:基于共享文件和客户端—服务器。前者(包括像Microsoft Access和FileMaker这样的产品)是为桌面使用设计的,一般不用在更高端或更关键的应用程序上(包括Web站点和基于Web的应用程序)。

像Oracle、MySQL(及其副产品MariaDB)和Microsoft SQL Server这样的数据库就是基于客端—服务器的数据库。客户端—服务器应用程序被分成两个截然不同的部分,服务器(Server)部分是一个负责所有数据访问和操作的软件,它运行在称为数据库服务器(Database Server)的计算机上。

只有服务器软件与数据文件交互。对数据的所有请求、数据添加和删除以及数据更新都是通过服务器软件传送的。这些请求或更改来自于运行客户端软件的计算机。客户端(Client)是用户与之交互的软件。例如,如果请求按字母顺序排列的产品列表,客户端软件将通过网络把该请求提交给服务器软件。服务器软件将处理请求;根据需要筛选、丢弃和排序数据;然后把结果发回给客户端软件。

注意:你需要多少台计算机?


客户端和服务器软件可能安装在两台或一台计算机上。无论如何,客户端软件都将为所有的数据库交互而与服务器软件通信,而不管它们是否位于同一台机器上。

所有这些动作的发生对于你(即用户)是完全透明的。你对数据存储在别处或者数据库服务器甚至正在执行所有这些处理的事实并不知情。你从不需要直接访问数据文件。事实上,大多数网络都被设置成使用户不能访问数据,或者甚至不能访问存储数据的驱动器。

这为什么很重要?这是因为要使用Oracle,将需要访问运行Oracle服务器软件的计算机以及给Oracle发出命令的客户端软件。

注意:客户端?服务器?为什么我应该在意?


我要指出这一点的原因是:从设计上讲,刚开始学习客户端—服务器软件时要更复杂一点。当使用字处理器或电子数据表时,在计算机上打开应用程序,它将处理本地数据。客户端—服务器数据库软件不是像这样工作的。生产服务器通常运行在用户永远不能直接访问的数据中心里,因此运行服务器软件的计算机上面很少具有客户端工具。类似地,当与这些数据库打交道时,用户通常使用连接到远程生产服务器的本地工具,他们将在本地而不是在服务器上安装客户端工具。因此,在可以使用那些客户端工具之前必须配置它们,使得它们可以访问远程服务器。如你稍后将看到的,即使服务器和客户端工具的确位于相同的机器上,也需要这样做。

第1章中提到,所有的SQL实现在创建时都是有差异的,这是不幸的;如果可以为一个版本的DBMS学习和编写SQL,并使之原封不动地在任何其他的DBMS上运行,那将非常理想。对于早期的SQL,这实际上更有可能发生,但是多年来DBMS供应商需要添加受标准SQL支持以外的特性和功能,因此它们就创建了自己的SQL语言变体。

PL/SQL代表过程语言/结构化查询语言(Procedural Language / Structured Query Language),它是Oracle的SQL实现(从Oracle版本7起就是这样)。你将在本书中学习的SQL就是PL/SQL,这意味着它只适用于Oracle。你将学习的大部分内容(尤其是在前面的章节中)也非常适用于其他的DBMS,但是在本书后面肯定不是这样。

前面讲到,Oracle是一个客户端—服务器数据库,要使用它,将需要客户端软件(用于实际运行SQL命令的程序)。客户端软件存在许多选项,但是你应该特别清楚下面两个Oracle选项。

尽管可以免费地使用所想要的任何客户端工具(无论是什么客户端工具,使用的PL/SQL总是相同的),我强烈建议使用Oracle SQL Developer作为你的第一个工具,并且本书中的指令假定你正是这样做的。

如你现在所知的,要开始使用Oracle,以及循序渐进地学习本书中的课程,需要访问Oracle DBMS(或者Oracle Server)和客户端应用程序(用于访问服务器的软件)。

你不需要自己安装的Oracle服务器,但是需要能够访问Oracle服务器。你基本上有两个选项。

注意:针对Mac用户的重要说明


Oracle停止了将Mac OS作为服务器平台的官方支持。如果你是一位Mac OS用户,可以安装客户端软件,并使用它连接到远程Oracle数据库服务器,但是你将不能在Mac机上安装Oracle DBMS本身(好吧,至少不能轻松地安装它或者使用任何文件记载的选项)。因此,Mac用户必须选择前面指出的两个选项中的第一个选项。

提示:如果你能够做到,就安装一个本地服务器


为了进行完全的控制,包括访问由于使用别人的Oracle DBMS而可能得到授权的命令和特性,可以安装你自己的本地服务器。即使你最后没有使用本地服务器作为最终的生产DBMS,仍然可以通过完全、不受约束地访问服务器必须提供的命令和特性而获益。

如果你将使用现有的托管Oracle服务器,那么将不需要担心它是什么版本,因为你将在本书中学习的几乎一切知识都适合于所有的版本(如果有你需要知道的特定于某个版本的问题,我将顺手指出它们)。

如果你想安装自己的服务器,可以有两种选择。

提示:建议使用Oracle Database Express Edition


从我刚才给出的描述中应该可以明显看出,我的建议是:如果你是Oracle初学者,并且希望重点关注PL/SQL(与重点关注的是管理Oracle服务器相对),就可以使用Oracle Database Express Edition。如果你以前从未安装和配置过完整的Oracle服务器,那么这可能会使你受挫,如果你的目标是学习PL/SQL,付出这种努力就是不必要的。Oracle XE的当前(在本书即将付印时)版本是11g Release 2。不过,如果你确实希望深入研究Oracle数据库管理这个领域,那么一定要安装完整的Oracle DBMS。

要学习关于Oracle的更多知识,可以访问http://oracle.com/

要下载服务器的副本,可以访问Oracle网站,并单击Download链接。网站上有相关功能说明,但是你感兴趣的可能是下面这些选项。

你需要创建一个Oracle账户,以下载任何软件,因此如果你还没有一个现成的账户,站点将提示你创建一个。

注意:Oracle SQL Developer在哪里?


与SQL*Plus(它总是与Oracle服务器一起安装的)不同,可能需要单独安装Oracle SQL Developer,这取决于你使用的Oracle版本。从Oracle 12c起,Oracle SQL Developer的确是作为服务器的一部分安装的。不过,如果你使用的是较老的Oracle版本或者Oracle Express,就必须自己下载并安装Oracle SQL Developer。

如果你是在安装本地Oracle服务器,就要在安装任何其他的客户端或应用程序之前安装它。

本书不介绍完整的Oracle服务器的准确安装步骤,如果需要关于安装的帮助,应该参阅Oracle网站上的文档。

Oracle Express Edition的安装涉及以下步骤。

无论你是否安装本地服务器,都会想要Oracle SQL Developer的一个本地副本。如果在安装Oracle服务器还没有安装它,可执行以下步骤。

只要软件安装正确,你就可以准备学习第3章了。

你现在知道Oracle是什么,PL/SQL是什么,以及需要继续安装什么软件了。你还应该能够访问Oracle服务器(本地或远程),安装客户端软件并准备好使用它们。在第3章中,我将说明如果登录和退出服务器,以及如何执行命令。本书中的课程都使用真实的SQL语句和真实的数据,因此我还将引领你创建和填充示例数据库表。


相关图书

Oracle从入门到精通
Oracle从入门到精通
Oracle 12c数据库应用与开发
Oracle 12c数据库应用与开发
Oracle PL/SQL程序设计(第6版)(上下册)
Oracle PL/SQL程序设计(第6版)(上下册)
Oracle性能优化与诊断案例精选
Oracle性能优化与诊断案例精选
Oracle数据库管理与维护实战
Oracle数据库管理与维护实战
Oracle SQL疑难解析
Oracle SQL疑难解析

相关文章

相关课程