《Oracle PL/SQL程序设计(第5版)》一一1.2 PL/SQL的起源

简介:

本节书摘来自异步社区出版社《Oracle PL/SQL程序设计(第5版)》一书中的第1章,第1.2节,作者:【美】Steven Feuerstein , Bill Pribyl,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 PL/SQL的起源

Oracle PL/SQL程序设计(第5版)
Oracle公司一度领导软件工业为设计数据库和应用程序提供一种声明式的、非过程化的方法。Oracle数据库服务器是世界上最先进的、最强大的、最稳定的关系数据库。它的应用程序开发工具,比如Oracle Forms,通过提供大量的默认功能,提高了生产力水平,开发人员只要依靠“在屏幕上涂涂画画”的方法,就能避免自行开发的劳苦。

1.2.1 早期的PL/SQL

在早期的Oracle中,SQL的声明式方法,以及开天辟地的关系技术,已经足以满足开发人员的需要了。不过随着技术成熟,期望值也增加了,需求也更迫切了。开发人员需要能够“深入”产品。他们需要在他们的表单和数据库脚本中构建复杂的公式、异常和规则。

1988年,Oracle公司发布了Oracle版本6,这是Oracle在关系数据库方面的重大进步。这个版本出现了一个叫做“程序选项”或者PL/SQL的关键组件。差不多在同一时间,Oracle发布了期待已久的SQLForms 2.3版(这个产品最初叫做Oracle Forms或者Forms Developer)。SQLForms 3.0版首次在工具端整合了PL/SQL引擎,开发人员可以以一种自然的、直观的方法编码程序逻辑。

第一版的PL/SQL功能非常有限。在服务器一端,我们只能用PL/SQL编写“批处理”形式的过程以及SQL语句脚本。我们无法用模块化方法构建应用程序或者在服务器上保存业务规则。在客户端,SQL*Froms 3.0版确实能够创建过程和函数,尽管支持函数但是因为没有文档说明,因此多年以来大部分开发人员都无法使用这个功能。还有,这一版的PL/SQL既不支持数组也不能和操作系统进行交互(输入或者输出)。距离一个功能完备的编程语言还差得很远。

但是尽管有诸多限制,可是PL/SQL还是被开发者社区亲切的,甚至是热情的接受。人们强烈的渴望能够在SQL*Forms中使用简单的IF语句。而对于能够运行多个SQL语句的批处理的呼声更是甚嚣尘上。

当时部分开发人认识到,驱动PL/SQL的原动力和愿景早已经超越了对类似于SQL*Forms产品中编程控制的期望,对于早期的Oracle数据库及工具,Oracle公司承认产品架构中有两个主要缺陷:缺乏可移植能力和执行授权问题。

1.2.2 改进的应用程序移植能力

对于像我们这些熟悉Oracle公司的市场和技术策略的人来说,关注移植性可能有点怪异。早在1980年Oracle的一个商标就是移植能力。在PL/SQL出现时,基于C语言的数据库可以在许多不同的操作系统和硬件平台上运行,SQLPlus和SQLForms也很容易适应不同的终端配置环境。不过尽管如此,还是有许多的应用程序需要利用主机语言比如COBOL、C、FOTRAN提供的复杂精细的控制能力。一旦开发人员脱离了中立的Oracle工具,最后应用程序就不在是可移植的了。

PL/SQL语言的目的就是为了扩宽应用需求的范围,提供一种完全操作系统独立的编程工具。今天,Java和其他的编程语言也提供了类似的移植能力。不过PL/SQL仍是这个领域的先驱,当然,它也将继续帮助开发人员编写高度可移植的应用程序代码。

1.2.3 改进的执行授权和事务一致性

比可移植性更基本的问题就是执行授权。数据库和SQL语言让我们可以紧密地控制对任何个别数据库表的访问和修改。例如,通过GRANT命令,我们可以确保只有特定的角色和用户可以对指定表执行更新操作。另一方面,GRANT命令不能确保用户或者应用执行的更新操作能够正确执行,换句话说,数据库不能确保跨越多个表的事务的一致性,在业务事务中涉及多个表是很常见的。

PL/SQL语言为逻辑事务提供了紧密的控制和管理能力。PL/SQL实现这种能力的一个方式就是通过执行授权。我们不再是给一个角色或者用户对某个表的更新权限,我们只是授权执行某个过程,后者控制着对底层数据结构的访问。这个过程是由另外一个Oracle数据库模式所有(程序的“定义者”),是给这个模式授予执行事务需要用到的表的更新权限。现在这个过程成了事务的“门卫”。程序(不管是一个Oracle Forms应用或者是一个Pro*C可执行程序)能够运行的唯一方法就是通过这个过程。利用这种方法,整个应用程序的事务一致性都得到了保证。

从Oracle 8i数据库开始,Oracle用通过提供AUTHID子句为PL/SQL的执行授权模型添加了更多的灵活性。使用AUTHID,我们可以继续用之前描述的定义者权限模型运行程序,或者我们也可以选择使用AUTHID CURRENT_USER(调用者权限),这时这个程序是用调用者(当前)模式的授权运行的。调用者权限模型只是这么多年来PL/SQL逐渐成熟和更加灵活的一个例子。

1.2.4 低调地起步,稳定地前进

尽管SQL很强大,仅靠它也不能提供开发人员创建全功能应用程序的灵活性和功能。Oracle的PL/SQL语言保证了我们可以完全待在独立于操作系统的Oracle环境中,同时还能编写出满足用户需求的高效应用程序。

Oracle从开始到现在已经发展了很长时间了。在PL/SQL 1.0版,开发人员总是会告诉他或者她的经理,“我们用PL/SQL无法完成”。今天,这句话不再是事实了。如果我们遇到一个需求结果发现,“没法实现,”千万不要和你的经理这么说。相反,我们应该深入研究这个语言,或者探索一下Oracle提供的大量的PL/SQL包。事实上,今天的PL/SQL基本上可以帮助我们完成任何需要的功能。

多年来,Oracle公司不断证明他对PL/SQL的承诺,一个一流的编程语言。数据库的每一个新版本,Oracle都会对PL/SQL语言本身进行一些稳定的基本的改进。提供了大量的(内置的)包在多方面扩展了PL/SQL语言的能力。已经引入了面向对象功能,实现了多种类似数组的数据结构,对编译器进行增强既能够优化我们的代码也可以对可能的质量和性能问题提出警告,总之从广度和深度上对语言进行了提升。

接下来的章节会通过一些PL/SQL程序实例帮助我们数据PL/SQL编程基础。

相关文章
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
7天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
7天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。
|
SQL Oracle 关系型数据库
Oracle SQL优化之多表连接
Oracle SQL优化之多表连接
433 0
Oracle SQL优化之多表连接
|
SQL 关系型数据库 Oracle
ORACLE SQL优化之ORA-03150&ORA-02055&ORA-02063
                                                                                                             >   
4767 0
|
SQL 存储 Oracle
Oracle SQL语句优化方法总结
  1、SQL语句尽量用大写的   因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。   2、使用表的别名   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,   就可以减少解析的时间并减少那些由列歧义引起的语法错误。   3、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)
167 0
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
好书推荐—《基于Oracle的SQL优化》
这是一本全书都在讲SQL性能优化的书。 这是国内目前SQL优化最详尽的一本书。 读了这本书,你会发现,SQL优化其实不是感觉的那么难。 这本书挺厚,800多页,对比它的价格,100多人民币,物有所值。
1218 0

推荐镜像

更多