oracle 11g函数包缓存,Oracle 11g 的PL/SQL函数结果缓存
模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数。
C:\Documents and Settings\guogang>sqlplus gg_test/gg_test@10.10.15.25_gg
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 8月 4 19:46:44 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> drop table test1 purge;
SQL> drop table test2 purge;
SQL> create table test1 as select * from dba_objects;
SQL> create table test2 as select * from all_objects;
SQL> select count(*) from test1;
COUNT(*)
----------
74144
SQL> select count(*) from test2;
COUNT(*)
----------
73248
SQL> create or replace function f1
return number
is
l_ret number;
begin
select count(*) into l_ret
from test1,test2
where test1.object_type = test2.object_type
and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');
return l_ret;
end;
/
函数已创建。
SQL> set timing on
SQL> select f1() from dual;
F1()
----------
60681409
已用时间: 00: 00: 07.29
--禁用结果缓存
SQL> execute dbms_result_cache.Bypass(bypass_mode=>true,session=>true);
SQL> select f1() from dual;
F1()
----------
60681409
已用时间: 00: 00: 03.60
--启用结果缓存
SQL> execute dbms_result_cache.Bypass(bypass_mode=>false,session=>true);
SQL> select f1() from dual;
F1()
----------
60681409
已用时间: 00: 00: 00.00
SQL> delete from test1 where object_type = 'VIEW' and rownum <100;
SQL> delete from test2 where object_type = 'VIEW' and rownum <100;
SQL> commit;
SQL> select f1() from dual;
F1()
----------
59788330
已用时间: 00: 00: 07.09 --可以看到数据发生变化,即使不使用RELIES_ON,结果集也是正确的。
SQL> select count(*)
from test1, test2
where test1.object_type = test2.object_type
and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');
COUNT(*)
----------
59788330已用时间: 00: 00: 03.56
SQL> create or replace function f2
return number
result_cache RELIES_ON(test1,test2)
is
l_ret number;
begin
select count(*) into l_ret
from test1,test2
where test1.object_type = test2.object_type
and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');
return l_ret;
end;
/
函数已创建。
SQL> select f2() from dual;
F2()
----------
59788330
已用时间: 00: 00: 03.54
SQL> select f2() from dual;
F2()
----------
59788330
已用时间: 00: 00: 00.00
SQL> delete from test1 where object_type = 'VIEW' and rownum <100;
SQL> delete from test2 where object_type = 'VIEW' and rownum <100;
SQL> commit;
SQL> select f2() from dual;
F2()
----------
58914853
已用时间: 00: 00: 03.50
SQL> select count(*)
from test1, test2
where test1.object_type = test2.object_type
and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');
COUNT(*)
----------
58914853
已用时间: 00: 00: 03.50
oracle 11g函数包缓存,Oracle 11g 的PL/SQL函数结果缓存相关推荐
- Oracle学习笔记(最重要的是PL/SQL编程)
一:Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create databa ...
- 在SQL中使用PL/SQL函数存在的问题
-----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...
- Ask Tom之中英文对照20051228——PL/SQL函数返回CLOB类型值
Ask Tom之中英文对照20051228--PL/SQL函数返回CLOB类型值 问: 我已经通读了相关文档,但是在实际应用中仍然不太清楚我的理解是否确切. 我已经创建了如下的函数--产生一个小的结果 ...
- PL/SQL -- 函数
--================== -- PL/SQL --> 函数 --================== 函数通常用于返回特定的数据.其实质是一个有名字的PL/SQL块,作为一个sc ...
- oracle 12c pl/sql语言,ORACLE 12C SQL语句中通过with 定义PL/SQL 函数
在ORACLE 12C支持在sql语句中编写函数,用来实现sql语句操作需要使用函数的部分功能,该功能对于你不想在数据库中新建函数 or 你的库是read only模式下要使用新函数实现某种功能,可以 ...
- SQL/Oracle——第六章 PL/SQL函数(作业3)
第6章:PL/SQL块 --6-19 beginp3(var_job=>'SALESMAN',i,j,k); end; /declarecursor cur_emp(var_job in var ...
- oracle 找不到程序单元,Oracle Web ADI 加载时错误:ORA-06508: PL/SQL: 无法在调用之前找到程序单元...
Oracle EBS 的Web ADI给批量导入数据提供一个不错的解决方案.但是,Web ADI开发比较麻,主要缺点如: 1.集成器设置好以后不能修改,必须要事先考虑包的存储过程或函数的参数.则否,存 ...
- Oracle入门(十四F)之PL/SQL定义变量
一.变量介绍 (1)变量的使用 可以使用变量: 临时存储数据 存储值的操作 可重用性 (2)PL/SQL中的变量处理 变量是: 在声明部分中声明和初始化 在可执行部分中使用和分配新值 变量可以是: 作 ...
- Oracle入门(十四.2)之PL / SQL的好处
一.PL / SQL的好处 在Oracle数据库中使用PL / SQL编程语言有很多好处. 1.将过程构造与SQL集成 2.模块化程序开发 3.改进的性能 4.与Oracle工具集成 5.便携性 6. ...
最新文章
- oracle修改memory,Oracle 修改 MEMORY_TARGET
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j...
- 怎么用git将本地代码上传到远程服务器_TortoiseGit将本地git仓库上传到远程git服务器方法...
- Linux运维工程师:30道面试题整理
- 【MAC】Ncnn 编译so文件方案
- spring boot 常用项目文件结构
- JVM结构与OOM问题分析
- centos7 最小gnome桌面_Linux 桌面进化史
- PPT优秀模板|7个技巧,让你的设计呈现更加完美
- [转]挺不错的辞职申请[“模板“]
- 第6堂视频课:看到词句就会读-下
- javac: 无效的标记
- 小说作者推荐:银发死鱼眼合集
- 华为网络设备查询系统时间及修改系统时间命令
- linux下终端解压rar,Linux下解压.rar文件
- 基于TMI8421的3D打印机步进电机解决方案
- light Mode:real-time\mixed\Baked
- 2021年中式烹调师(高级)考试及中式烹调师(高级)考试试卷
- CSS 浮动(float)
- 收藏 不错 的ReactJS教程