Вопрос

Я пытаюсь использовать Oracle Кэш результатов функции на 11.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.

Что я делаю не так?

Это было полезно?

Решение

Какую редакцию вы используете?Функциональность кэша доступна только в Enterprise Edition, поэтому, если вы попробуете это сделать при установке Standard Edition, это не сработает.Это в Руководство по лицензированию.

Другие советы

Я собираюсь добавить эту информацию сюда, потому что нашел ее полезной при решении моей аналогичной проблемы.

если вы получаете статус ОТКЛЮЧЕН или ОБХОД, помните

*Область памяти кэша результатов расположена в общем пуле, поэтому значение 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;
/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top