PLSQL Language Reference-PL/SQL新功能-版本11.1 新功能

版本11.1 新功能

正则表达式SQL函数的增强

正则表达式SQL函数regexp_instrregexp_substr功能已经增强。

还有一个新的函数regexp_count,返回模式在字符串中出现的次数。

simple_integer, simple_floatsimple_double数据类型

4种数据类型分别是预定义pls_integer, binary_float, binary_double的子类型。每个类型与其对应的基类型有相同的范围,有not null约束。

simple_integerpls_integer在溢出语义上有很在差别,但simple_floatsimple_double除了not null约束外,与基类型相同。

如果值不会为null,并且溢出检查不是必须的,则可以使用simple_integer类型。

如果值不会为null,也可以使用simple_floatsimple_double

因为没有通常的检查null和溢出的开销,这些子类型可以比它们的基类型提供显著的更好的性能,当PLSQL_CODE_TYPE='NATIVE',因为对simple_integer的算术操作直接在硬件上完成;如果PLSQL_CODE_TYPE='INTERPRETED',则性能提升很小。

continue语句

使用该语句可以退出循环的当次迭代,并将控制权转向下一次迭代。continue语句有2种形式:

n  continue(无条件的)

n  continue when (有条件的)

PL/SQL表达式中的序列

伪列currvalnextval使得书写PL/SQL源文本更容易,并提高运行时的性能和可扩展性。

可以在使用number表达式的地方使用 序列名.curval和序列名.nextval

动态SQL加强

无论是本地动态SQL还是dbms_sql包都得到了增强。

本地动态SQL现在支持clob,所以支持超过32KB的动态SQL语句。

DBMS_SQL包中:

n  所有本地动态SQL支持的类型都支持。

n  dbms_sql.parse函数接受clob参数,允许动态SQL语句超过32KB

n  dbms_sql.to_refcursor函数允许将dbms_sql包转换为本地动态SQL

n  dbms_sql.to_cursor函数允许将本地动态SQL转换为dbms_sql

PL/SQL子程序调用中的命名和混合记法

11.1之前,一个调用PL/SQL子程序的SQL语句必须按位置指定实参。

11.1中基于命名的和混合的记法都是允许的。

这样当SQL语句调用一个有多个默认参数的PL/SQL子程序并且只有少数实参需要提供与默认值不同的值时,可以提高可用性。

create or replace function compute_bonus(emp_id NUMBER, bonus NUMBER)

return number

is

    emp_sal number;

begin

    select salary into emp_sal

    from employees

    where employee_id = emp_id;

    return emp_sal + bonus;

end compute_bonus;

/

select compute_bonus(120, 50) from dual;                    -- 基于位置

select compute_bonus(bonus => 50, emp_id => 120) from dual; -- 命名

select compute_bonus(120, bonus => 50) from dual;           -- 混合

PL/SQL函数结果缓存

函数结果缓存可以节省相当的空间和时间。每次使用不同的参数调用结果缓存函数时,这些参数和结果被存储到缓冲区中,然后当使用相同的参数调用相同的函数时,会从缓冲区获取结果,而不是重新计算。

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 DeveloperJDeveloper)中使用它,而不是直接使用。

PL/SQL层次剖析器

它报告你的PL/SQL程序的动态执行纲要,通过子程序调用来组织。它分别计数SQLPL/SQL的执行次数。在动态执行纲要的每个子程序层次的概览中包括子程序的调用次数、子程序自己执行的时间、子程序分支树上花费的时间、详细的父子关系等信息。

可以在浏览器中查看生成的HTML报告。浏览器的导航能力和优选出来的链接提供了有效的方法来分析大应用程序,提高应用程序的性能,降低开发成本。

PL/SQL本地编译器直接产生本地代码

PL/SQL本地编译器直接产生本地代码,而不是将PL/SQL代码转换成C代码,再由C编译器产生本地代码。一个个人开发者可以编译PL/SQL单元进行本地执行,而不需要在DBA部分进行安装。本地编译的PL/SQL程序的执行速度提升了,有些情况下成数量级提升。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1101951/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1101951/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值