6

我试图在11.2.0上使用 Oracle 的函数结果缓存,所以我做了以下测试:

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

我究竟做错了什么?

4

2 回答 2

16

您使用的是哪个版本?缓存功能仅在企业版中可用,因此如果您在标准版安装中尝试此功能,它将无法正常工作。它在许可指南中。

于 2010-02-18T17:58:41.617 回答
0

我将在此处添加此信息,因为我发现它对解决我的类似问题很有用。

如果您获得 DISABLED 或 BYPASS 状态,请记住

* Result Cache 内存区域位于共享池中,因此 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;
/
于 2013-05-06T02:37:31.083 回答