不是重新计算。
在11.1之前,如果想让PL/SQL程序缓存函数的结果,必须对缓存和缓存管理子程序进行设计和编码。如果多个会话运行你的应用,每个会话必须有它自己的缓存和缓存管理子程序的拷贝。有时每个会话必须执行相同的代价高昂的计算。
在11.1中,PL/SQL提供了函数结果缓存。为了使用函数结果缓存,可以在每个想缓存结果的PL/SQL函数中使用result_cache子句。因为函数结果缓存存在于SGA中,运行你应用的任何会话都可以访问。
在将你的应用转化为PL/SQL函数结果缓存之后,它会使用更多的SGA,但是会使用相当少的整个系统内存。
复合DML触发器
创建在表上或editioning视图上的复合DML触发器可以在多个时间点被触发。每个时间点部分都有自己的执部分和可选的异常处理部分,所有的这些部分都可以访问常规的PL/SQL state。常规state开始于触发语句开始,消失于触发语句结束,甚至是当触发语句产生错误时。
在11.1之前,开发者使用从属包来模块化常规状态。这种方法当触发语句出现错误和语句后触发器没有触发时,对应用程序是难处理的,也可能导致内存泄露。当你实现的行为需要在多个时间点共享数据时,复合触发器提供了辅助的方法。
对触发器的更多控制
create trigger语句现在支持enable, disable, follows子句,可以对触发器有更多的控制。
disable允许创建一个disable状态的触发器,这样可以在enable一个触发器之前确保触发器代码成功编译。
enable显示地指定的默认的触发器状态。
follows可以控制建立在相同表上或拥有相同时间点的触发器的触发顺序。
自动子程序内联
子程序内联会将子程序调用替换为被调用的子程序的拷贝,这可以提高程序的性能。
可以使用PRAGMA INLINE指定单独的子程序的调用是否内联;也可以设置PLSQL_OPTIMIZE_LEVEL = 3,默认值为2来开启自动内联,让编译器来寻找内联机会。
当自动内联不会提升应用程序性能的情况下(很少),可以使用PL/SQL层次分析器来识别想关掉内联的子程序。
PL/Scope
它是一个编译器驱动的工具,可以用来收集和组织PL/SQL源代码中用户定义的标识符的数据。因为它是一个编译器驱动的工具,所以需要在交互式的环境(如SQL Developer或JDeveloper)中使用它,而不是直接使用。
PL/SQL层次剖析器
它报告你的PL/SQL程序的动态执行纲要,通过子程序调用来组织。它分别计数SQL和PL/SQL的执行次数。在动态执行纲要的每个子程序层次的概览中包括子程序的调用次数、子程序自己执行的时间、子程序分支树上花费的时间、详细的父子关系等信息。
可以在浏览器中查看生成的HTML报告。浏览器的导航能力和优选出来的链接提供了有效的方法来分析大应用程序,提高应用程序的性能,降低开发成本。
PL/SQL本地编译器直接产生本地代码
PL/SQL本地编译器直接产生本地代码,而不是将PL/SQL代码转换成C代码,再由C编译器产生本地代码。一个个人开发者可以编译PL/SQL单元进行本地执行,而不需要在DBA部分进行安装。本地编译的PL/SQL程序的执行速度提升了,有些情况下成数量级提升。
1.1 PL/SQL概览
PL/SQL是SQL的过程化扩展,是一种便携的、高性能的过程处理语言。
1.1.1 PL/SQL的优点
1.1.1.1 与SQL的紧密集成
允许使用所有的SQL数据操作、光标控制、事务控制语句;
所有的SQL函数、操作符和伪列。
支持所有SQL数据类型。不需要在PL/SQL数据类型和SQL数据类型之间进转换;
可以给PL/SQL数据成员赋与表的列或行的类型,而不需要显式地指定该种数据类型。
PL/SQL允许运行SQL查询,一次一个地处理结果集中的行。
PL/SQL支持静态SQL,也支持动态SQL。
静态SQL:在编译时所有文本是确定的。
动态SQL:直到运行时,它的全部文本才能确定。动态SQL可以使应用程序更加灵活和通用。
1.1.1.2 高性能
PL/SQL是将一个语句块发送给数据库,可以显著地降低应用程序和数据库之间的通信量。
(1)绑定变量
当在PL/SQL代码中嵌入insert, update, delete,select这些SQL语句时,PL/SQL编译器会将where和values子句中的变量转化为绑定变量。每当相同的代码运行时,Oracle可以重用这些SQL语句,这样可以提高性能。
当使用动态SQL时,PL/SQL不会自动创建绑定变量,但可以通过显式指定来在动态SQL中使用绑定变量。
(2)子程序
PL/SQL子程序是以可运行的形式被存储的,可以被重复地调用。因为存储子程序是在数据库服务器上运行的,一个通过网络的单独的调用可能会开始一个很大的工作。任务的分开可以降低网络通信量和提高响应时间。存储子程序是被缓存的且在用户之间共享,这可以降低内存需要和调用开销。
(3)优化器
PL/SQL编译器有个优化器,可以重新组织代码取得更好的性能。
1.1.1.3 高生产力
PL/SQL可以为操作数据写出紧凑的代码。就像PERL一样的脚本语言一样,可以在文件中读、转化和写数据;PL/SQL可以查询、转化和更新数据库中的数据。
PL/SQL有许多功能可节省设计和调试的时间,并且它在所有的环境中都是一致的。可以在一个Oracle工具中学习使用PL/SQL,然后可以将知识转移到其它工具上。例,可以在SQL Developer中创建PL/SQL块,然后在Oracle窗体触发器中使用它。
1.1.1.4 可移植性
可以在任何运行Oracle数据库的操作系统和平台上运行PL/SQL程序。
1.1.1.5 可扩展性
PL/SQL存储子程序通过在数据库服务器上集中应用程序处理来提高可扩展性。共享服务器的共享内存设施允许Oracle数据库支持一个节点上的数以千计的并发用户。
对于更进一步的可扩展性,你可以使用Oracle连接管理器来多路传输网络连接。
1.1.1.6 易处理性
因为可以在数据库服务器上维护子程序的一个拷贝,而不是每个客户端一个拷贝。任何数量的应用程序都可以使用这个子程序,可以在不影响调用它的应用程序的情况下修改子程序。
1.1.1.7 支持面向对象编程
使用抽象数据类型(ADT)来支持面向对象编程。
1.1.1.8 支持Web应用开发
PL/SQL可以创建直接从数据库产生Web页面的应用程序。可以通过Web来访问数据库,可以通过内部网访问内部数据。
PL/SQL Web应用程序编程流程类似于CGI PERL脚本。开发者通常使用CGI脚本来动态产生Web页面,但这样的脚本通常不是访问数据的最佳选择。使用PL/SQL存储子程序来传递Web内容提供了数据库访问的能力和灵活性。例,可以使用DML语句、动态SQL和光标。这样也可以避免对每个HTTP请求生成新的CGI进程来处理的开销。
可以完成使用PL/SQL网状和PL/SQL Web Tookit来生成基于浏览器的Web应用。
PL/SQL网关允许Web浏览器通过HTTP监听调用PL/SQL存储子程序。mod_plsql是PL/SQL网关的一个实现,是Oracle HTTP Server的一个插件,允许Web浏览器调用PL/SQL存储子程序。
PL/SQL Web Tookit是一个PL/SQL包的集合,提供了通过mod_plsql在运行时使用存储子程序的通用接口。
1.1.1.9 支持服务器页面开发
PL/SQL Server Pages(PSPs)允许开发带有动态内容的web页面。PSPs是编写存储子程序的一种替代,每次为web页面写一行html代码。
特定的标签允许在html代码中嵌入PL/SQL脚本。在客户端如浏览器请求页面时脚本执行。脚本可以接受参数,查询和更新数据库,然后显示一个自定义的页面来展示结果。
在开发过程中,PSPs的行为像一个模板,拥有页面布局的静态部分和内容的动态部分。可以使用喜爱的HTML权威工具设计页面布局,为动态内容留有点位符。然后可以使用PL/SQL脚本产生内容。结束后,可以以存储子程序形式将PSP文件加载到数据库上。
1.1.2 PL/SQL的主要功能
PL/SQL结合了SQL的数据操作能力和过程语言的处理能力。
当可以使用SQL解决问题时,可以从PL/SQL程序执行SQL语句,而不用学习新的API。
像其它的过程处理语言一样, PL/SQL 允许声明常量、变量、控制程序流向、定义子程序、捕获运行时错误。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-752593/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-752593/