ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Reference-PL/SQL子程序-PL/SQL函数结果缓存-开启函数结果缓存

PLSQL Language Reference-PL/SQL子程序-PL/SQL函数结果缓存-开启函数结果缓存

原创 Oracle 作者:LuiseDalian 时间:2014-03-30 21:24:58 0 删除 编辑

PL/SQL函数结果缓存

PL/SQL函数结果缓存机制提供了语言支持和系统管理的方法来在SGA中缓存PL/SQL函数结果,这个缓存的结果对于运行你的应用程序的每个会话都是可用的。缓存机制高效并易于使用,可以将你从开发自己的缓存和缓存管理策略中解放出来。

 

为函数开启结果缓存,使用RESULT CACHE子句。当结果缓存函数被调用的的时候,系统会检查缓冲区,如果缓冲区包含前面使用相同参数调用该函数产生的结果集,则系统会将缓存的结果返回给调用者,而不会执行函数体;如果缓存不包含结果,则系统会执行函数体,并在将控制权返回给调用者之前,将结果集加入到缓存中。

注意:如果函数执行时异常结束,则异常的结果不会存储到缓存中。

缓存可以积累多个结果集,对于每个唯一的参数值组合都会有一个结果,结果缓存函数都被调用。如果系统需要更多的内存,它会使一个或多个缓存结果过期(删除)

Oracle数据库会自动检测结果缓存函数在运行时查询的资源(表和视图)。如果对这些数据源的任何改变被提交了,则缓存的结果会变成无效,需要重新计算。

经常被调用的,但它依赖的信息却很少改变或根本不改变的函数,最适合应用结果缓存。

开启函数结果缓存

--函数结果缓存

CREATE OR REPLACE PACKAGE department_pkg IS

    TYPE dept_info_record IS RECORD (

         dept_name  departments.department_name%TYPE,

         mgr_name   employees.last_name%TYPE,

         dept_size  PLS_INTEGER);

 

    -- 对结果进行缓存的函数

    FUNCTION get_dept_info (dept_id PLS_INTEGER)

    RETURN dept_info_record

    RESULT_CACHE;

 

END department_pkg;

/

 

CREATE OR REPLACE PACKAGE BODY department_pkg IS

    -- 函数定义

    FUNCTION get_dept_info (dept_id PLS_INTEGER)

    RETURN dept_info_record

    --结果集依赖于DEPARTMENTSEMPLOYEES,对表的任何改变都会使缓存结果无效

    RESULT_CACHE RELIES_ON (DEPARTMENTS, EMPLOYEES)

    IS

        rec  dept_info_record;

    BEGIN

        SELECT department_name INTO rec.dept_name

        FROM departments

        WHERE department_id = dept_id;

 

        SELECT e.last_name INTO rec.mgr_name

        FROM departments d, employees e

        WHERE d.department_id = dept_id

        AND d.manager_id = e.employee_id;

 

        SELECT COUNT(*) INTO rec.dept_size

        FROM EMPLOYEES

        WHERE department_id = dept_id;

 

        RETURN rec;

    END get_dept_info;

END department_pkg;

/


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

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5566988