模仿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函数结果缓存相关推荐

  1. Oracle学习笔记(最重要的是PL/SQL编程)

    一:Oracle认证,与其它数据库比较,安装 Oracle安装会自动的生成sys用户和system用户: (1) sys用户是超级用户,具有最高权限,具有sysdba角色,有create databa ...

  2. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  3. Ask Tom之中英文对照20051228——PL/SQL函数返回CLOB类型值

    Ask Tom之中英文对照20051228--PL/SQL函数返回CLOB类型值 问: 我已经通读了相关文档,但是在实际应用中仍然不太清楚我的理解是否确切. 我已经创建了如下的函数--产生一个小的结果 ...

  4. PL/SQL -- 函数

    --================== -- PL/SQL --> 函数 --================== 函数通常用于返回特定的数据.其实质是一个有名字的PL/SQL块,作为一个sc ...

  5. oracle 12c pl/sql语言,ORACLE 12C SQL语句中通过with 定义PL/SQL 函数

    在ORACLE 12C支持在sql语句中编写函数,用来实现sql语句操作需要使用函数的部分功能,该功能对于你不想在数据库中新建函数 or 你的库是read only模式下要使用新函数实现某种功能,可以 ...

  6. 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 ...

  7. oracle 找不到程序单元,Oracle Web ADI 加载时错误:ORA-06508: PL/SQL: 无法在调用之前找到程序单元...

    Oracle EBS 的Web ADI给批量导入数据提供一个不错的解决方案.但是,Web ADI开发比较麻,主要缺点如: 1.集成器设置好以后不能修改,必须要事先考虑包的存储过程或函数的参数.则否,存 ...

  8. Oracle入门(十四F)之PL/SQL定义变量

    一.变量介绍 (1)变量的使用 可以使用变量: 临时存储数据 存储值的操作 可重用性 (2)PL/SQL中的变量处理 变量是: 在声明部分中声明和初始化 在可执行部分中使用和分配新值 变量可以是: 作 ...

  9. Oracle入门(十四.2)之PL / SQL的好处

    一.PL / SQL的好处 在Oracle数据库中使用PL / SQL编程语言有很多好处. 1.将过程构造与SQL集成 2.模块化程序开发 3.改进的性能 4.与Oracle工具集成 5.便携性 6. ...

最新文章

  1. oracle修改memory,Oracle 修改 MEMORY_TARGET
  2. 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j...
  3. 怎么用git将本地代码上传到远程服务器_TortoiseGit将本地git仓库上传到远程git服务器方法...
  4. Linux运维工程师:30道面试题整理
  5. 【MAC】Ncnn 编译so文件方案
  6. spring boot 常用项目文件结构
  7. JVM结构与OOM问题分析
  8. centos7 最小gnome桌面_Linux 桌面进化史
  9. PPT优秀模板|7个技巧,让你的设计呈现更加完美
  10. [转]挺不错的辞职申请[“模板“]
  11. 第6堂视频课:看到词句就会读-下
  12. javac: 无效的标记
  13. 小说作者推荐:银发死鱼眼合集
  14. 华为网络设备查询系统时间及修改系统时间命令
  15. linux下终端解压rar,Linux下解压.rar文件
  16. 基于TMI8421的3D打印机步进电机解决方案
  17. light Mode:real-time\mixed\Baked
  18. 2021年中式烹调师(高级)考试及中式烹调师(高级)考试试卷
  19. CSS 浮动(float)
  20. 收藏 不错 的ReactJS教程

热门文章

  1. CTB6.0标注体系
  2. 关于Mac共享WiFi网络,看这里就够了(2 4G,5G , ipv6)
  3. SpringBoot系列之(二):2.注解
  4. docker 更改阿里云镜像
  5. 不重视需求过程的项目队伍将自食其果
  6. vue项目之H5 app 生成海报功能
  7. Mac 下如何添加网段
  8. Win7安装 boost库
  9. sspanel php,sspanelv3魔改版邮件设置指南及常用配置
  10. 7-6,输入厘米,输出英尺英寸