90设计网站免费素材,南昌app定制,电子商务网站推广的界定,自己怎么建设网站Oracle11g新增的SQL缓存结果集的功能前面已经介绍过了。同时Oracle对PL/SQL的函数也进行了相应的增加。允许函数缓存返回结果。先看一个简单的例子#xff1a;SQL CREATE TABLE T AS SELECT * FROM DBA_SOURCE;表已创建。SQL CREATE OR REPLACE FUNCTION F_NO_RESULT_…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 AS2 V_RETURN NUMBER;3 BEGIN4 SELECT COUNT(*) INTO V_RETURN FROM T;5 RETURN V_RETURN;6 END;7 /函数已创建。SQL SET TIMING ONSQL SELECT F_NO_RESULT_CACHE FROM DUAL;F_NO_RESULT_CACHE-----------------593334已用时间: 00: 00: 12.26SQL SELECT F_NO_RESULT_CACHE FROM DUAL;F_NO_RESULT_CACHE-----------------593334已用时间: 00: 00: 07.53SQL 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 AS2 V_RETURN NUMBER;3 BEGIN4 SELECT COUNT(*) INTO V_RETURN FROM T;5 RETURN V_RETURN;6 END;7 /函数已创建。已用时间: 00: 00: 00.03SQL SELECT F_RESULT_CACHE FROM DUAL;F_RESULT_CACHE--------------593334已用时间: 00: 00: 07.87SQL SELECT F_RESULT_CACHE FROM DUAL;F_RESULT_CACHE--------------593334已用时间: 00: 00: 00.06SQL DISC从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options 断开SQL CONN YANGTK/yangtkORA11G已连接。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 AS2 V_RETURN NUMBER;3 BEGIN4 SELECT COUNT(*) INTO V_RETURN FROM T;5 RETURN V_RETURN;6 END;7 /函数已创建。已用时间: 00: 00: 00.07SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593334已用时间: 00: 00: 06.90SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593334已用时间: 00: 00: 00.04SQL 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.11SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593334已用时间: 00: 00: 00.34SQL DELETE T WHERE ROWNUM 1;已删除 1 行。已用时间: 00: 00: 00.04SQL SELECT COUNT(*) FROM T;COUNT(*)----------593333已用时间: 00: 00: 08.23SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593334已用时间: 00: 00: 00.06SQL COMMIT;提交完成。已用时间: 00: 00: 00.03SQL 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.FLUSHPL/SQL 过程已成功完成。已用时间: 00: 00: 00.03SQL CREATE OR REPLACE FUNCTION F_RESULT_CACHE(P_IN NUMBER)2 RETURN NUMBER RESULT_CACHE RELIES_ON (T) AS3 V_RETURN NUMBER;4 BEGIN5 SELECT COUNT(*) INTO V_RETURN FROM T;6 RETURN V_RETURN;7 END;8 /函数已创建。已用时间: 00: 00: 00.04SQL SELECT COUNT(*) FROM T;COUNT(*)----------593333已用时间: 00: 00: 09.60SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593333已用时间: 00: 00: 04.82SQL SELECT F_RESULT_CACHE(1) FROM DUAL;F_RESULT_CACHE(1)-----------------593333已用时间: 00: 00: 00.06SQL DELETE T WHERE ROWNUM 1;已删除 1 行。已用时间: 00: 00: 00.03SQL SELECT COUNT(*) FROM T;COUNT(*)----------593332已用时间: 00: 00: 00.26SQL 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) |