2010-02-18 45 views
6

我試圖使用Oracle的Function Result Cache11.2.0,所以我做了以下測試:如何啓用函數結果緩存

CREATE OR REPLACE FUNCTION get_test_value 
    RETURN NUMBER 
    RESULT_CACHE 
AS 
BEGIN 
    dbms_output.put_line('Called'); 
    RETURN 0; 
END; 

SELECT get_test_value FROM dual; 

我每次示例打印Called,雖然。
我也嘗試了一些在線發現的其他示例,但不使用緩存。

我試過ALTER SYSTEM SET result_cache_max_size = 10485760;
還是不行。

我試過ALTER SESSION SET result_cache_mode=FORCE;(這不應該是必須的) - 沒有幫助。

SELECT dbms_result_cache.status FROM dual;總是返回DISABLED

我在做什麼錯?

回答

15

您正在使用哪個版本?緩存功能僅在企業版中可用,所以如果您在標準版安裝中嘗試此功能,則不起作用。它在Licensing Guide

+0

個人版可能有它,但個人版僅Windows,並且11gR2尚未在Windows上發佈 – 2010-02-18 22:51:47

+0

Ouch。嘗試與企業,它的作品像一個魅力:)非常感謝! – 2010-02-19 12:54:39

+1

@Peter Lang - 甲骨文大部分性感新功能往往只是EE(當它們不是額外費用時),因此許可指南是重要的閱讀內容。 – APC 2010-02-19 15:49:40

0

我想在這裏添加這個信息,因爲我發現它有助於解決我的類似問題。

如果你正在禁用或旁路的狀態記得

* 結果緩存內存的區域位於在共享池中所以,RESULT_CACHE_MAX_SIZE的值從共享池大小消耗。*

所以請檢查下列參數

show parameter shared_pool_size 
show parameter result_cache_max_size 
show parameter result_cache_mode 

你也可以嘗試

BEGIN 
    dbms_result_cache.ByPass(False); 
END; 
/