我正在尝试在 11.2.0 上使用Oracle的Function Result Cache,所以我做了以下测试:
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
。
我做错了什么?
答案 0 :(得分:16)
您使用的是哪个版本?缓存功能仅在Enterprise Edition中可用,因此如果您在标准版安装上尝试此功能,则无法使用。它位于Licensing Guide。
答案 1 :(得分:0)
我将在此处添加此信息,因为我发现它有助于解决我的类似问题。
如果您获得DISABLED或BYPASS状态,请记住
* 结果缓存内存区域位于共享池中,因此,从共享池大小中消耗了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;
/