oracle 11g函数包缓存,Oracle11新特性——PLSQL函数缓存结果(一)

Oracle11g新增的SQL缓存结果集的功能前面已经介绍过了。同时Oracle对PL/SQL的函数也进行了相应的增加。允许函数缓存返回结果。

先看一个简单的例子:

SQL> CREATE TABLE T AS SELECT * FROM DBA_SOURCE;

表已创建。

SQL> CREATE OR REPLACE FUNCTION F_NO_RESULT_CACHE RETURN NUMBER AS

2 V_RETURN NUMBER;

3 BEGIN

4 SELECT COUNT(*) INTO V_RETURN FROM T;

5 RETURN V_RETURN;

6 END;

7 /

函数已创建。

SQL> SET TIMING ON

SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE

-----------------

593334

已用时间: 00: 00: 12.26

SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE

-----------------

593334

已用时间: 00: 00: 07.53

SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE

-----------------

593334

已用时间: 00: 00: 08.17

对于普通的函数,需要每次都重新执行,而如果采用了RESULT_CACHE功能?br />

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE RETURN NUMBER RESULT_CACHE AS

2 V_RETURN NUMBER;

3 BEGIN

4 SELECT COUNT(*) INTO V_RETURN FROM T;

5 RETURN V_RETURN;

6 END;

7 /

函数已创建。

已用时间: 00: 00: 00.03

SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE

--------------

593334

已用时间: 00: 00: 07.87

SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE

--------------

593334

已用时间: 00: 00: 00.06

SQL> DISC从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

SQL> CONN YANGTK/yangtk@ORA11G已连接。

SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE

--------------

593334

已用时间: 00: 00: 00.04

对于采用了RESULT_CACHE的函数,Oracle自动将函数的返回结果缓存,下次执行的时候,不会实际执行函数,而是直接返回结果。

而且由于缓存的结果存储在SGA中,因此所有的会话可以共享这个结果。在上面的例子中,断开连接并重建登陆后,新的会话也是可以利用存储在SGA中的函数缓存的。

注意,函数的RESULT_CACHE功能自动和函数的输入参数关联,即使输入参数不起任何作用,不同的输入参数也会导致RESULT_CACHE不生效。

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE(P_IN NUMBER) RETURN NUMBER RESULT_CACHE AS

2 V_RETURN NUMBER;

3 BEGIN

4 SELECT COUNT(*) INTO V_RETURN FROM T;

5 RETURN V_RETURN;

6 END;

7 /

函数已创建。

已用时间: 00: 00: 00.07

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593334

已用时间: 00: 00: 06.90

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593334

已用时间: 00: 00: 00.04

SQL> SELECT F_RESULT_CACHE(2) FROM DUAL;

F_RESULT_CACHE(2)

-----------------

593334

已用时间: 00: 00: 07.15

下面看一下RELIES_ON语句对RESULT_CACHE的影响。建立了上面的函数只完成了一部分功能,如果函数中访问了数据库中的对象,那么需要指定RELIES_ON语句来说明结果依赖的对象。如果没有制定,会导致函数访问的数据变化后,RESULT CACHE仍然生效,这时候会返回错误的结果:

SQL> SELECT COUNT(*) FROM T;

COUNT(*)

----------

593334

已用时间: 00: 00: 08.11

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593334

已用时间: 00: 00: 00.34

SQL> DELETE T WHERE ROWNUM = 1;

已删除 1 行。

已用时间: 00: 00: 00.04

SQL> SELECT COUNT(*) FROM T;

COUNT(*)

----------

593333

已用时间: 00: 00: 08.23

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593334

已用时间: 00: 00: 00.06

SQL> COMMIT;

提交完成。

已用时间: 00: 00: 00.03

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593334

已用时间: 00: 00: 00.06

由于没有指定依赖关系,Oracle并不会自动维护RESULT CACHE的正确性,这种依赖关系需要在建立函数的时候通过RELIES_ON来建立:

SQL> EXEC DBMS_RESULT_CACHE.FLUSH

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.03

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE(P_IN NUMBER)

2 RETURN NUMBER RESULT_CACHE RELIES_ON (T) AS

3 V_RETURN NUMBER;

4 BEGIN

5 SELECT COUNT(*) INTO V_RETURN FROM T;

6 RETURN V_RETURN;

7 END;

8 /

函数已创建。

已用时间: 00: 00: 00.04

SQL> SELECT COUNT(*) FROM T;

COUNT(*)

----------

593333

已用时间: 00: 00: 09.60

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593333

已用时间: 00: 00: 04.82

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593333

已用时间: 00: 00: 00.06

SQL> DELETE T WHERE ROWNUM = 1;

已删除 1 行。

已用时间: 00: 00: 00.03

SQL> SELECT COUNT(*) FROM T;

COUNT(*)

----------

593332

已用时间: 00: 00: 00.26

SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)

-----------------

593332

已用时间: 00: 00: 00.29

添加了RELIES_ON语句后,Oracle会根据依赖对象自动INVALIDATE结果集,从而保证RESULT CACHE的正确性。

阅读(125) | 评论(0) | 转发(0) |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

luci L大_油耗最低1.4L!开这四款车一个月都不用进加油站

如今人们对于纯电动车的接受程度在日益增加,但续航问题依旧没有完全解决,成为了许多人难以逾越的关卡。其实,插电式混动车型同样适合作为消费者的首选,其具备了纯电动车易上牌、环保节能的优势,同时还保留了传统燃油车…

php时间比现实时间慢8个小时,关于PHP获取时间比实际时间少8小时的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼date_default_timezone_set(Asia/Hong_Kong);以下是手册上的List of Supported Timezones:Asia/AdenAsia/AlmatyAsia/AmmanAsia/AnadyrAsia/AqtauAsia/AqtobeAsia/AshgabatAsia/AshkhabadAsia/BaghdadAsia/BahrainAsia/…

python定义一个圆类_(python)创建一个可以比较的自定义类

示例:对于论坛中的帖子,需要根据帖子的点赞数,浏览数和评论数进行排序。三个排序标准的优先级顺序为:点赞数>浏览数>评论数。也就是说,先按点赞数排序,如果点赞数相等,其次才按浏览数&…

为什么手机联系人里有permission_为什么有人在咖啡馆里不看手机不看电脑没有同伴,独自喝咖啡?...

通常,你是因为什么原因,在咖啡馆停留?聊天?谈事?工作?学习?如果你经常去咖啡馆,你也许不会发现,有这样一类人,他们一个人,坐在咖啡馆里&#xff0…

php pdo输出数据库,PHP中PDO对像及PDOStatement::fetch()的用法数据库查询,结果输出处理...

//isset()判读用户是否提交查询请求if(isset($_GET[dosubmit])){//创建PDO数据库查询对象$pdonew PDO(mysql:hostlocalhost;dbnametest,root,);//准备查询预处理语句,返回预处理对象$stmt$pdo->prepare("select * from users");//执行查询$stmt->ex…

cad考试题库绘图题答案_证券从业资格考试证券市场基本法律法规题库答案

内容简介本题库是证券业从业人员资格考试科目《证券市场基本法律法规》的题库,包括历年真题和章节题库两个部分。具体如下:第一部分为历年真题。精选历年真题,每道题目均提供答案和详细的解析,练习和自测都适宜。通过该部分学习&a…

.net 将html写成的table 转换成excel_Python读取二进制,HTML,XML格式存储Excel

前言RPA设计器版本:2020.2Python读取三种不同存储格式Excel文件Excel文件的存储格式有多种,有我们平常公认的二进制格式,也有HTML格式,还有XML格式的等。目前,小编接触到RPA项目的Excel文件格式主要是上述说的三种格式…

航天金税 接口_用友凭证接口可以实现数据之间无缝对接和打通

用友凭证接口可以实现数据之间无缝对接和打通用友凭证接口支持数据源多样性:凭证接口可以支持多种数据源、多种系统做接口集成,其中以医院HIS系统、航天金税系统、OA系统、其他软件业务系统等已经成功对接并导入数据。可以支持sql、mysql、orecal、excel…

matlab数组存字符串,MATLAB字符串数组存储为CSV格式

直奔主题,需要保存处理图像的文件名(string)数组。本文只用作自己的实验记录,侵删。搬运自matlab官网的代码:https://www.mathworks.com/matlabcentral/fileexchange/7601-cell2csv?s_tidmwa_osa_a以下为MATLAB cell array to csv的函数实现…

python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响

在实践中,性能影响几乎与您省略了partitionBy子句相同.所有记录将被洗牌到一个分区,在本地排序并逐个顺序迭代.差异仅在于总共创建的分区数.让我们举例说明使用包含10个分区和1000个记录的简单数据集的示例:df spark.range(0, 1000, 1, 10).toDF("index"…

oracle 最近的sql语句,oracle最近执行的sql语句

oracle最近执行的sql语句2017-01-13oracle 查询最近执行过的 SQL语句1、修改日期显示格式alter session set nls_date_format’YYYY-MM-DD HH24:MI:SS’;2、哪个主机最近执行的sql语句:SELECT b.sql_text,a.machine,a.username, a.module,c.sofar / totalwork * 100,c.elapsed_…

selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了

如今,网上流传着一句话:「五年没考过执医,就不要出来为祸人间了」但事实上,有很多同学,并不是不适合这条路,而是不知道如何学习前段时间,20 年的执医考试分数出了。看到很多人在丁香论坛分享自己…

检测到目标url存在框架注入漏洞_HOST注入攻击剖析

关于网站的渗透测试可能师傅们都有自己一套思路,有个共同点就是目标网站基本属于全静态页面,几乎很少存在动态参数这时意味着客户端无法通过提交参数形式进行测试,理论上也规避掉了许多风险。既然无法从参数层面进行测试,那么考虑…

php简单环境,PHP 简单的环境搭建

windows nginx mysql php https://code.google.com/p/wnmp-server/ php手册 http://www.phpchina.com/download/handbook/openbiz_manual/php-bigxhtml.html http://www.php.net/manual/zh/index.php http://www.w3school.com.cn/php/index.asp http://localhwindows nginx m…

wpfdiagram 学习 教学_李倩、吴欣歆:新高考背景下高中语文教学的三个转变

新高考背景下高中语文教学的三个转变李倩 吴欣歆大量的实证研究指出,以中高考为代表的高利害型评价方式对教师教学具有显著的回冲效应。当考试与评价能够为学科学习带去更多富有价值的信息以及关于学习理念、学习策略的积极引领时,评价对教学的指挥棒作…

python莫比乌斯_莫比乌斯函数 - osc_7eqzxl4g的个人空间 - OSCHINA - 中文开源技术交流社区...

前导要学习莫比乌斯函数 需要学习 到 积性函数,深度理解欧拉筛。先说说什么是积性函数吧。积性函数其实积性函数非常好理解,定义积性函数:若gcd(a,b)1,且满足f(ab)f(a)f(b),则称f(x)为积性函数完全积性函数&#xff1a…

macos catalina 合盖 风扇狂转_防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400_...

防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400 一、防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400 风机概述隔爆型防爆排风扇(以下简称排风扇)其防爆性能按《爆炸性环境用防爆电气设备通用要求》《 爆炸性环境用防爆电气设备隔爆型电气设…

python的xlrd怎么安装_python接口测试,第三方包xlrd和xlutils,怎么安装

第1个:xlrd的下载地址:https://pypi.python.org/pypi/xlrd/0.9.2安装过程:下载后解压文件夹,使用cd命令行进入该文件夹后,用命令:python setup.py install 之后再import发现安装好了第2个:pip i…

linux传输文件scp自动接密码,配置scp在Linux或Unix之间传输文件无需密码

如何配置scp文件传输实现scp在Linux或Unix之间传输文件,首先需要配置好scp,默认scp要使用密码的,通过以下配置可以不用输入密码,就完成Linux或Unix之间的文件传输假设有2台Linux, A server, B server(ip假设…

Excel表Ctrl+v和Ctrl shift+v有什么区别_Ctrl键与10个数字键,26个字母键的组合应用技巧解读...

键盘是一种必备的输入设备,其应用率最高的就是10个数字和26个字母。如果将这10个数字和26个字母与Ctrl键组合,并应用到Excel中,会是怎样的一种体验。一、Ctrl与数字键。1、Ctrl1:打开【设置单元格格式】对话框。方法:选…