PLSQL Language Reference-PL/SQL子程式-PL/SQL函式結果快取-開啟函式結果快取

LuiseDalian發表於2014-03-30

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章